Как установить значения полей по умолчанию для формы добавления в jqgrid из текущей строки

Добавить кнопку панели инструментов используется для добавления новой строки в jqgrid. Добавить форму, которая появляется, содержит все заполненные поля пустые. Как установить значения полей формы формы из значений столбцов из строки, которая была текущая/выбрана, когда была добавлена ​​команда добавления? Используются удаленные данные json. Или, если это проще, как вызвать метод сервера, передающий текущую/выбранную строку для извлечения значений по умолчанию для добавления формы с сервера?

jqgrid содержит также скрытые столбцы. Если возможные значения из скрытых столбцов из текущей строки также должны быть отправлены для добавления контроллера, если сохраняется форма добавления.

Обновление

Я попытался использовать большое предложение Олега с помощью

         afterShowForm: function(formID) {
           var selRowData, 
               rowid = grid.jqGrid('getGridParam', 'selrow');
           if (rowid === null) {
             // todo: how to cancel add command here
             alert('Please select row');
             return;
             }

           selRowData = grid.jqGrid('getRowData', rowid);
           if (selRowData === null) {
             alert('something unexpected happened');
             return;
             }

           $('#' + 'Baas' + '.FormElement', formID).val(selRowData.Baas);
           }

Приложение сохраняет открытую форму после сохранения. После первого сохранения поля Baas пусто. Похоже, что событие afterShowForm запускается только один раз, а не после каждого сохранения. Как исправить это, чтобы добавить несколько строк со значениями по умолчанию без закрытия формы добавления? Как отменить или не разрешить команду "Добавить", если нет выбранной строки?

Ответ 1

Если вам нужно выполнить некоторые действия по инициализации только для формы "Добавить", вы можете использовать как минимум два подхода:

  • использование свойства defaultValue как функции внутри editoptions. Функция обратного вызова defaultValue может предоставить значение для соответствующего поля формы "Добавить" на основе данных из выбранной строки. Для оптимизации вы можете прочитать данные из текущей выбранной строки один раз в beforeInitData обратном вызове/событии. Вы можете просто прочитать данные, которые вам нужны, или сделать синхронный вызов на сервер, чтобы получить необходимую вам информацию. Единственным недостатком использования свойства defaultValue является то, что он использует метод jQuery.val для установки значения по умолчанию для всех полей формы добавления с exception 'checkbox' edittype. Для флажков jqGrid установлено свойство check из флажка false, 0, no, off или undefined не найдено в значении, возвращаемом свойством defaultValue. Таким образом, подход не будет работать для других типов редактирования. Например, он может выйти из строя для custom edittype.
  • использование beforeShowForm или afterShowForm. Внутри функций обратного вызова вы можете установить любое значение формы. Вы можете найти подачу соответствующего столбца сетки по идентификатору поля, которое совпадает с значением свойства name соответствующего столбца.

Как вы уже знаете, вы можете получить идентификатор текущей выбранной строки относительно getGridParam и получить данные из выбранной строки

var selRowData, rowid = grid.jqGrid('getGridParam', 'selrow');
if (rowid !== null) {
    // a row of grid is selected and we can get the data from the row
    // which includes the data from all visible and hidden columns
    selRowData= grid.jqGrid('getGridParam', 'selrow');
}

где grid - объект jQuery, такой как $('#list'), который выбирает основной элемент <table> сетки.

В демо вы можете увидеть, как работает первый подход, описанный выше.