Я использую плагин jqGrid с открытым исходным кодом с EF4 и веб-формами ASP.NET. Мне нужно установить элемент ввода во встроенной редактируемой строке сетки на основе значения столбца из БД. Например, первая строка может содержать DDL, вторая строка может содержать флажок и т. Д.
Я пытаюсь добиться этого, используя custom_element
и custom_values
, например так:
$("#grid1").jqGrid({
url: 'Default.aspx/getGridData',
datatype: 'json',
...
colModel: [
...
//contains the input type ('select', etc.)
{ name: 'InputType', hidden:true },
...
//may contain a string of select options (''...)
{
name: 'Input',
editable:true,
edittype:'custom',
editoptions:{
custom_element: /* want cell value from InputType column here */ ,
custom_value: /* want cell value from Input column here */
}
},
...
]
});
Документы jqGrid говорят, что я могу вызывать пользовательские функции для установки custom_element
и custom_values
, но я не вижу, как я могу захватить столбец значения и передать их в мои пользовательские функции.
Для установки custom_values
я заметил хорошее решение Олега с использованием параметра list:
, но оно, похоже, включало дополнительный вызов Ajax. Я хочу избежать этого, поскольку у меня уже есть все данные, которые мне нужны из первоначального вызова Ajax для сетки.
Таким образом, мне нужно сделать следующее в режиме встроенного редактирования:
Я также готов отказаться от использования custom_element
и custom_values
, но тогда я все еще сталкиваюсь с той же проблемой динамической установки параметров редактирования edittype
и : {значение:}
параметры.
Есть идеи, как это сделать? Есть ли другой подход, который я должен использовать?
ОБНОВЛЕНИЕ : Спасибо за ваши усилия, чтобы помочь мне. Вот сокращенный пример моего ответа JSON для каждого запроса:
{"d":[
{"Input":null,"InputType":"select"},
{"Input":"From downtown, proceed west on Interstate 70.", "InputType":"text"}
]}
С этими данными я хотел бы показать пустой выбор в одной строке и заполненное текстовое поле в следующей строке. Оба будут доступны для редактирования в строке.
РЕШЕНИЕ : Я вернулся к этой проблеме, чтобы найти решение, которое не предполагает использование custom_element
и custom_values
. Вот мое решение (на основе принятого ответа ниже) для изменения edittype
и editoptions
:
loadComplete: function () {
var rowIds = $("#grid1").jqGrid('getDataIDs');
$.each(rowIds, function (i, row) {
var rowData = $("#grid1").getRowData(row);
if (rowData.InputType == 'select') {
$("#grid1").jqGrid('restoreRow', row);
var cm = $("#grid1").jqGrid('getColProp', 'Input');
cm.edittype = 'select';
cm.editoptions = { value: "1:A; 2:B; 3:C" };
$("#grid1").jqGrid('editRow', row);
cm.edittype = 'text';
cm.editoptions = null;
}
});
}
Nota Bene : Одна важная вещь для меня не забывал установить editoptions
обратно в null
после вызова editrow
. Кроме того, как Олег упомянул в комментариях, отказ от использования настраиваемых элементов позволяет мне без лишних проблем реализовать ввод датпикера. Это было важно для моего приложения, поэтому я согласился с ответом Олега, но все равно поддержал ответ Уолтера.Если это дурной тон, я искренне извиняюсь. Я просто хотел наградить решение, которое лучше всего сработало для меня.