jqGrid - Как установить пользовательские параметры редактирования на основе * начальных * значений столбца?

Я использую плагин 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 для сетки.

Таким образом, мне нужно сделать следующее в режиме встроенного редактирования:

  1. динамически назначить тип ввода из значения DB
  2. динамически назначить входные значения (для DDL или флажков) из строки DB

Я также готов отказаться от использования 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 . Кроме того, как Олег упомянул в комментариях, отказ от использования настраиваемых элементов позволяет мне без лишних проблем реализовать ввод датпикера. Это было важно для моего приложения, поэтому я согласился с ответом Олега, но все равно поддержал ответ Уолтера.Если это дурной тон, я искренне извиняюсь. Я просто хотел наградить решение, которое лучше всего сработало для меня.

6
задан Community 23 May 2017 в 10:27
поделиться