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

And*_*rus 6 javascript jquery jquery-ui 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;
    }
  }
Run Code Online (Sandbox Code Playgroud)

更新

我试过代码

 $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;
                }
             }
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

仅调用oneditfunc func.如何强制onSuccess,afterSave,onError等方法也被调用?

更新2

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

$.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;
          }  
        } 
      }
    }
} );
Run Code Online (Sandbox Code Playgroud)

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

Ole*_*leg 5

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

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

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

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

更新:好的!现在我看到了你的问题.你以前在短短的错误性质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
});
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用新的$ .jgrid.inlineEdit功能设置keys,oneditfunc或内联编辑的其它参数.该功能的实现不完全正确,但您可以从github检查当前版本(请参阅此处)并在您的版本中执行相同的修改jquery.jqGrid.src.js.无论如何,我建议在发布下一版本的jqGrid后使用$ .jgrid.inlineEdit功能.优点是您可以轻松设置editRow独立于调用函数的选项(from inlineNav,'actions'formatter或任何其他方式).

jqGridInlineEditRow事件功能(请参阅此处以获取更多信息)将允许您实现类似于您现在在onInlineEdit事件内部执行的操作,而无需使用oneditfunc该操作一次.