Я использую плагин 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 ('<option>Option1</option>'...)
{
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 для сетки.
В итоге мне нужно сделать следующее в режиме встроенного редактирования:
- динамически назначать тип ввода из значения БД
- динамически назначать входные значения (для DDL или флажки) из строки БД
Я также готов пропустить использование custom_element
и custom_values
, но тогда я все еще сталкиваюсь с той же проблемой динамической установки параметров edittype
и editoptions:{value:}
.
Есть идеи, как это сделать? Есть ли другой подход, который я должен использовать?
ОБНОВЛЕНИЕ : Спасибо за ваши усилия, чтобы помочь мне. Для каждого запроса приведен сокращенный пример моего ответа 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
. Также, как отметил Олег в комментариях, отказ от использования пользовательских элементов позволяет мне без проблем вводить ввод даты. Это было важно для моего приложения, поэтому я в конечном итоге принял ответ Олега, но я все равно также проголосовал за ответ Уолтера. Если это плохая форма, я искренне извиняюсь. Я просто хотел наградить решение, которое работало лучше всего для меня.