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

ниже код устанавливает значения по умолчанию для новой строки, если строка добавляется с помощью формы. Если строка добавляется с помощью кнопки jqGrid inline add из панели инструментов, эти методы не вызываются и значения по умолчанию не заданы.

как заставить встроенное добавление выполнять ту же логику, что и приведенный ниже код ?

var lastSelectedRow;
$grid.navGrid("#grid_toppager", { 
del: true,
add: true,
view: true,
edit: true
          }, 
          {},

       { 
       addedrow: 'beforeSelected',
       url: '/Grid/Add?_entity=Desktop',
       beforeInitData: function () {
         // todo: how to call this method from inline add
         var rowid = $grid.jqGrid('getGridParam', 'selrow');
         if (rowid === null) {
           alert( 'Select row before adding');
           return false;
           }
         },

       afterShowForm: function(formID) {
         // todo: how to set default values as this method sets from inline add
         var selRowData, 
            rowid = $grid.jqGrid('getGridParam', 'selrow');
         $('#' + 'Recordtype' + '.FormElement').val('Veerg');
         $('#' + 'Nait2' + '.FormElement')[0].checked = true;
         selRowData = $grid.jqGrid('getRowData', rowid);
         $('#' + 'Baas' + '.FormElement').val(selRowData.Baas);
         $('#' + 'Liigid' + '.FormElement').val(selRowData.Liigid);
       }
       );


$grid.jqGrid('inlineNav', '#grid_toppager', {
    addParams: {
        position: "beforeSelected", 
        rowID: '_empty',
        useDefValues: true,
        addRowParams: {
            keys: true,
            onEdit :  onInlineEdit
        }
    },

    editParams: {
        editRowParams: {
            onEdit : onInlineEdit
            }
    },

   add: true,
   edit: false,
   save: true,
   cancel: true
}); 

function onInlineEdit(rowId) {
  if (rowId && rowId !== lastSelectedRow) {
        cancelEditing($grid);
        lastSelectedRow = rowId;
    }
  }

обновление

я попробовал код

 $grid.jqGrid('inlineNav', '#grid_toppager', {
    addParams: {
        position: "beforeSelected", 
        rowID: '_empty',
        useDefValues: true,
        addRowParams: {
            keys: true,
            extraparam: { _dokdata: FormData },
            onSuccess : function (jqXHR) { 
alert('addp oncuss');
              jqXHRFromOnSuccess=jqXHR;
              return true;
              },
            afterSave: function (rowID) {
alert('afeesave addp ');
              cancelEditing($grid);
                  afterDetailSaveFunc(rowID,jqXHRFromOnSuccess);
              jqXHRFromOnSuccess=null; 
              },
            onError: errorfunc,
            afterRestore : setFocusToGrid,
            oneditfunc  : function (rowId) {
              var selRowData, selRowId ;
              if (rowId && rowId !== lastSelectedRow) {
                cancelEditing($grid);
                selRowId = $grid.jqGrid('getGridParam', 'selrow');
                if (selRowId ) {
                   selRowData = $grid.jqGrid('getRowData', selRowId ); 
                   $('#' + rowId + '_Reanr' ).val(selRowData.Reanr); 
                  }
                lastSelectedRow = rowId;
                }
             }
        }
    }
);

вызывается только функция oneditfunc. Как заставить onsuccess, afterSave, onError и т. д. методы также вызываться ?

обновление 2

я добавил патч в jqGrid из GitHub, рекомендованный в ответе, и попытался

$.extend( jQuery.jgrid.inlineEdit, {
  addParams: { 
    position: "beforeSelected", 
    rowID: '<%= EntityBase.NewRowIdPrefix %>',
    useDefValues: true,
    addRowParams: {
      keys: true,
      extraparam: { _dokdata: FormData },
      onSuccess : function (jqXHR) { 
        jqXHRFromOnSuccess=jqXHR;
        return true;
        },
      afterSave: function (rowID) {
              cancelEditing($grid);
              <% if (Model is RowBase ) { %>
                  afterDetailSaveFunc(rowID,jqXHRFromOnSuccess);
                <% } else { %>
                  afterGridSaveFunc(rowID,jqXHRFromOnSuccess);
                <% } %>
              jqXHRFromOnSuccess=null; 
              },
      onError: errorfunc,
      afterRestore : setFocusToGrid,
      oneditfunc : function (rowId) {
        if (rowId && rowId !== lastSelectedRow) {
          cancelEditing($grid);
          lastSelectedRow = rowId;
          }  
        } 
      }
    }
} );

Я в этом случае enter не завершает встроенное добавление. Все параметры из этого кода игнорируются.

1 ответов


вы должны использовать defaultValue свойства editoptions для установки значений по умолчанию для новой добавленной строки. В текущей документации вы можете найти, что опция действительна только в модуле редактирования формы:

параметр может быть строкой или функцией. Эта опция действительна только в Модуль редактирования формы при использовании метода editGridRow в режиме добавления. Если определен входной элемент с этим значением, если только элемент пустой. Если используется в selects текст должен быть представлен, а не ключ. Также, когда используется функция, функция должна возвращать значение.

но если вы изучите код new метода addrow метод вы увидите, что

  1. значение по умолчанию и true
  2. метод используется (см. здесь) the defaultValue свойства editoptions.

обновлено: ОК! Теперь я вижу твоя проблема. Вы использовали просто неправильные свойства в editRowParams и addRowParams части настройки. Правильно будет:

$grid.jqGrid('inlineNav', topPagerSelector, {
    addParams: {
        position: "beforeSelected", 
        rowID: '_empty',
        useDefValues: true,
        addRowParams: {
            keys: true,
            oneditfunc :  onInlineEdit
        }
    },
    editParams: {
        keys: true,
        oneditfunc: onInlineEdit
    },
   add: true,
   edit: false,
   save: true,
   cancel: true
});

кроме того, вы можете использовать новый $.jgrid.inlineEdit функция для установки keys, oneditfunc или другие Параметры встроенного редактирования. Реализация функции не является полностью правильной, но вы можете изучить текущую версию из github (см. здесь) и сделать то же самое изменение в вашей версии jquery.jqGrid.src.js. В любом случае я бы порекомендовал чтобы использовать $.jgrid.inlineEdit функции после публикации следующей версии jqGrid. Преимущество в том, что вы можете легко установить параметры editRow независимо от того, откуда будет вызываться функция (от inlineNav, 'actions' форматер или любым другим способом).

новая jqGridInlineEditRow событие (см. здесь для получения дополнительной информации) позволит вам реализовать действия, такие как то, что вы делаете сейчас внутри onInlineEdit событие без использование oneditfunc который может быть установлен только один раз.