Sto utilizzando jqGrid 4.4.0 con la modifica in linea. Per il gusto di questa domanda, la mia griglia ha quattro colonne: una colonna ID (SomeGridRowId), una colonna di testo con un completamento automatico jQuery (completamento automatico), una colonna di testo a carattere singolo (SingleChar) e una colonna nascosta boolean
(CanEditSingleChar). Devo abilitare o disabilitare la modifica della colonna di un singolo carattere in base al valore della colonna CanEditSingleChar
. Ho questo lavoro su righe esistenti utilizzando onSelectRow
e setColProp
, ma per qualche motivo non riesco a farlo funzionare correttamente sulle nuove righe inserite. Se aggiungo una nuova riga e selezioni un valore dal completamento automatico, la colonna SingleChar
è sempre modificabile. Ho fatto un passo attraverso il Javascript usando gli strumenti di sviluppo di Chrome e IE; i valori e le proprietà della colonna vengono impostati correttamente, ma la proprietàdella colonna SingleChar
non riflette questo.Modifica della proprietà modificabile della colonna di testo jqGrid in base ai risultati di un completamento automatico in un'altra colonna
Mi scuso per il gigantesco snippet di codice, ma non voglio lasciare nulla.
$("#coolGrid").jqGrid({
url: '@Url.Action("GetCoolGridData")',
postData: {
someId: function() { return $("#someId").val(); },
otherStaticArg: function() { return 1; }
},
datatype: 'json',
mtype: 'POST',
loadonce: true,
cellsubmit: 'clientArray',
editurl: 'clientArray',
scroll: true,
pager: $("#coolGridPager"),
rowNum: 200,
sortname: 'SomeGridRowId',
sortorder: 'asc',
viewrecords: true,
height: '100%',
colNames: ['SomeGridRowId', 'CanEditSingleChar', 'Autocomplete', 'SingleChar'],
colModel: [
{ name: 'SomeGridRowId', index: 'SomeGridRowId', hidden: true },
{ name: 'CanEditSingleChar', index: 'CanEditSingleChar', hidden: true },
{
name: 'Autocomplete',
index: 'Autocomplete',
width: 220,
editable: true,
edittype: 'text',
editoptions: {
dataInit: function (elem) {
$(elem).autocomplete({
source: '@Url.Action("GetSomeGridAutocomplete")',
minLength: 2,
select: function (event, ui) {
var rowId = getRowId($(this));
if (ui.item) {
$("#coolGrid").jqGrid('setCell', rowId, 'CanEditSingleChar', ui.item.CanEditSingleChar, '', '');
$("#coolGrid").jqGrid('setCell', rowId, 'Autocomplete', ui.item.label, '', '');
setSingleCharEditMode(rowId);
}
}
});
}
}
},
{
name: 'SingleChar',
index: 'SingleChar',
width: 10,
editable: true, //default to true, most are editable
edittype: 'text'
}
],
onSelectRow: function (clickedRow) {
if (clickedRow && clickedRow != $.coolGridLastSelectedRow) {
$("#coolGrid").jqGrid('saveRow', $.coolGridSelectedRow, false, 'clientArray');
$.coolGridLastSelectedRow = clickedRow;
}
setSingleCharEditMode($.coolGridLastSelectedRow);
$("#coolGrid").jqGrid('editRow', $.coolGridLastSelectedRow, true);
},
afterInsertRow: function (rowid, rowdata, rowelem) {
if (rowid == 'new_row') { //shown solely for completeness, pretty sure this is not the problem
var newRowIndex = $("#coolGridNewRowIndex").val();
if (!newRowIndex)
newRowIndex = 1;
var newRowId = rowid + "_" + newRowIndex;
$("#new_row").attr('id', newRowId);
newRowIndex++;
$("#coolGrid").val(newRowIndex);
$("#coolGrid").jqGrid('setSelection', newRowId, true);
}
}
});
$("#coolGrid").jqGrid('navGrid', '#coolGridPager',
{
add: false,
del: false,
edit: false,
search: false,
beforeRefresh: function() {
$("#coolGrid").jqGrid('setGridParam', { datatype: 'json' });
}
});
$("#coolGrid").jqGrid('inlineNav', '#coolGridPager',
{
edit: false,
add: true,
addtext: "Add",
save: false,
cancel: false,
restoreAfterSelect: false,
addParams: {
position: 'last',
addRowParams: {
keys: true
}
}
});
E la funzione setSingleCharEditMode
:
function setSingleCharEditMode(rowid) {
var rowData = $("#coolGrid").jqGrid('getRowData', rowid);
if (rowData.CanEditSingleChar === "false") {
$("#coolGrid").jqGrid('setColProp', 'SingleChar', { editable: false });
} else {
$("#coolGrid").jqGrid('setColProp', 'SingleChar', { editable: true });
}
}
Ho provato una grande quantità di roba, rigata attraverso un mucchio di altre domande in modo, su google come un pazzo .... tutto inutile. Ho fatto ricorso a strapparmi i capelli. Come posso controllare la proprietà editable
di una colonna dopo il completamento automatico select
su un'altra colonna, il tutto su una nuova riga?
EDIT
Ho un working example up here, finalmente. Se si aggiunge una riga e quindi si seleziona "Atypical *" nella colonna Autocomplete
, è possibile riprodurre questo comportamento.
Grazie per la vostra risposta riflessiva. Sto lavorando per ottenere un esempio online ora. –
Hai fatto progressi? E cosa ne pensi di assegnare quella taglia? Penso che non ci saranno altre risposte prima della fine del periodo di grazia. – Wolfram
Scusa, Wolfram, settimana frenetica la scorsa settimana e non ho avuto il tempo di ottenere un campione pienamente funzionante. Spero di lavorarci oggi, ma la taglia è tua (anche se non sono sicuro del motivo per cui è stata divisa in 100). –