встроенный поиск jqgrid

У меня есть jqgrid, на котором я выполняю встроенное редактирование. Я использую текстовое поле вместо текста. Как мне отправить данные после того, как я закончу редактирование ячейки. «Ввод» работает с текстом и, очевидно, не работает с текстовой областью, поскольку создает новую строку.

Это фрагмент моего кода

grid4 = $('#CaseNotes').jqGrid({
   ...
   { name: 'Note', index: 'Note', width: 650, align: 'left', sortable: false, 
      editable: true, edittype: 'textarea', editoptions: { rows: '5', cols: '100' }
   },
   ...
   onSelectRow: function (id) {
      if (id && id != lastsel) {
         grid4.restoreRow(lastsel);
         lastsel = id;
      }
      grid4.jqGrid('editRow', id, true, '', '', '', '', reload);
   },
   editurl: '@Url.Action("EditCaseNote", "CaseNote")',
   ...
});

//function to reload the grid
function reload(id, result) {
   grid4.setGridParam(
      {
         url: '@Url.Action("DisplayCaseNotesGrid", "CaseInfo")',
         datatype: 'json'
      }
   ).trigger('reloadGrid');
}

person brasewel    schedule 25.02.2012    source источник


Ответы (2)


Если я правильно понял, вы имеете в виду «встроенное редактирование» вместо «встроенного поиска». Поскольку вы не можете использовать клавишу Enter, вы должны включить дополнительную кнопку в панель инструментов навигации, которая вызывает метод saveRow. Вы можете либо добавить соответствующую строку вручную относительно navButtonAdd, либо используйте метод inlineNav.

person Oleg    schedule 25.02.2012
comment
Извините, я исправил свой пост. Я имел в виду встроенное редактирование. Итак, если у меня есть дополнительная кнопка, мне все еще нужно иметь этот grid4.jqGrid('editRow', id, true, '', '', '', '', reload); ? - person brasewel; 26.02.2012
comment
@brasewel: editRow необходим для инициализации встроенного редактирования. Кстати, я бы предпочел другую форму вызова: grid4.jqGrid('editRow', id, {keys: true, afterrestorefunc: reload};. Если вам нужно вызвать reload после сохранения, вы также должны использовать опцию {afterrestorefunc: reload} в вызове метода saveRow. - person Oleg; 26.02.2012
comment
Олег Я использовал grid4.jqGrid('inlineNav', '#casenotes_pager', { edit: true, add: false }); и удалил onSelectRow. Как мне вызвать функцию перезагрузки, чтобы обновить сетку после возврата контроллера? - person brasewel; 26.02.2012
comment
@brasewel: я думаю, это должно быть как grid4.jqGrid('inlineNav', '#casenotes_pager', { edit: true, add: false, editParams: { keys: true, afterrestorefunc: reload } }); - person Oleg; 26.02.2012

Благодаря совету Олега я смог решить эту проблему. Вот мой код, если кто-то столкнется с подобной проблемой. Я удалил свою функцию обновления, так как она мне больше не нужна.

grid4 = $('#CaseNotes').jqGrid({
...
{ name: 'Note', index: 'Note', width: 650, align: 'left', sortable: false, 
  editable: true, edittype: 'textarea', editoptions: { rows: '5', cols: '100' }
},
...
onSelectRow: function (id) {
   if (id && id != lastsel) {
      grid4.restoreRow(lastsel);
      lastsel = id;
   }
   grid4.jqGrid('editRow', id, { keys: true, afterrestorefunc: reload });
},
...
});
//Adds the button to the pager
grid4.jqGrid('navButtonAdd', '#casenotes_pager', {
   caption: 'Save Case Note',
   buttonicon: 'none',
   onClickButton: function () {
      //calls the saveRow function
      grid4.jqGrid('saveRow', lastsel,
      {
         url: '@Url.Action("EditCaseNote", "CaseNote")'
      }
      );
      //refreshes the grid
      grid4.setGridParam(
      {
         url: '@Url.Action("DisplayCaseNotesGrid", "CaseInfo")',
         datatype: 'json'
      }
      ).trigger('reloadGrid');
   }
});
person brasewel    schedule 26.02.2012