Estoy usando jqGrid 4.4.0 con edición en línea. Por el bien de esta pregunta, mi grilla tiene cuatro columnas: una columna ID (SomeGridRowId), una columna de texto con una autocompletar jQuery (Autocompletar), una columna de texto de un solo carácter (SingleChar) y una columna oculta boolean
(CanEditSingleChar). Necesito habilitar o deshabilitar la edición de la columna de un solo carácter en función del valor de la columna CanEditSingleChar
. Esto funciona en las filas existentes usando onSelectRow
y setColProp
, pero por alguna razón no puedo hacer que se comporte correctamente en las filas recién insertadas. Si agrego una nueva fila y selecciono un valor de la función autocompletar, la columna SingleChar
es siempre no editable. Pasé por el Javascript usando las herramientas para desarrolladores de Chrome e IE; los valores de las columnas y las propiedades se establecen correctamente, pero la propiedad de la columna SingleChar
10 no refleja esto.Cambiar la propiedad editable de una columna de texto jqGrid basada en los resultados de una autocompleta en otra columna
Me disculpo por el fragmento de código gigantesco, pero no quiero dejar nada.
$("#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
}
}
});
Y la función 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 });
}
}
He probado una gran cantidad de cosas, de ánima rayada a través de un montón de otras cuestiones así, googled como locos .... todo fue en vano. He recurrido a sacarme el pelo. ¿Cómo puedo controlar la propiedad editable
de una columna después de un autocompletar select
en otra columna, todo en una nueva fila?
EDITAR
Tengo un working example up here, por fin. Si agrega una fila y luego selecciona "Atípico *" en la columna Autocomplete
, puede reproducir este comportamiento.
Gracias por su respuesta. Estoy trabajando para obtener un ejemplo en línea ahora. –
¿Hiciste algún progreso? ¿Y qué piensas acerca de asignar esa recompensa? Creo que no habrá más respuestas antes de que finalice el período de gracia. – Wolfram
Perdón, Wolfram, semana agitada la semana pasada y no tuve tiempo de obtener una muestra totalmente funcional. Espero trabajar en ello hoy, pero la recompensa es tuya (aunque no estoy seguro de por qué se divide en 100). –