如果使用jqgrid中的内联添加按钮添加行,如何设置默认值

如果使用表单添加行,则下面的代码为新行设置默认值。 如果使用工具栏中的jqGrid内联添加按钮添加行,则不会调用这些方法,也不会设置默认值。

如何强制内联添加执行与下面的代码相同的逻辑?

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 func。 如何强制onSuccess,afterSave,onError等方法也被调用?

更新2

我在回答中推荐的github上添加了jqGrid的补丁并尝试了

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

我在这种情况下输入不会终止内联添加。 此代码中的所有参数都将被忽略。

您应该使用editoptions的 defaultValue属性为新添加的行设置默认值。 在当前文档中,您可以发现该选项仅在表单编辑模块中有效:

选项可以是字符串或函数。 当在添加模式下与editGridRow方法一起使用时,此选项仅在表单编辑模块中有效。 如果已定义,则只有元素为空时才使用此值设置input元素。 如果用于选择,则应提供文本而不是密钥。 此外,当使用函数时,函数应返回值。

但如果你检查新的addRow方法的代码,你会看到

  1. useDefValues选项的默认值为true
  2. 该方法确实使用(参见此处 ) editoptions的defaultValue属性。

更新 :好的! 现在我看到了你的问题。 您在editRowParamsaddRowParams部分设置中使用了错误的属性。 正确的将是:

 $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.inlineEditfunction来设置keysoneditfunc或其他内联编辑参数。 该function的实现不完全正确,但您可以从github检查当前版本(请参阅此处 )并在您的jquery.jqGrid.src.js版本中执行相同的修改。 无论如何,我建议在发布下一版本的jqGrid后使用$ .jgrid.inlineEditfunction。 优点是您可以轻松设置editRow选项,独立于调用函数的位置(来自inlineNav'actions'格式化程序或任何其他方式)。

新的jqGridInlineEditRow事件function(请参阅此处获取更多信息)将允许您实现类似于您现在在onInlineEdit事件中执行的操作, 而无需使用只能设置一次的oneditfunc