下面的代码设置新行的默认值。 如果使用工具栏中的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: '<%= 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;
}
}
}
}
} );
我在这种情况下输入不会终止内联添加。此代码中的所有参数都将被忽略。
答案 0 :(得分:5)
您应该使用editoptions的defaultValue
属性为新添加的行设置默认值。在当前文档中,您可以发现该选项仅在表单编辑模块中有效:
该选项可以是字符串或函数。此选项仅在 在添加模式下与editGridRow方法一起使用时的表单编辑模块。如果 如果只有元素,则使用此值设置input元素 空。如果用于选择,则应提供文本而不是密钥。 此外,当使用函数时,函数应该返回值。
但如果你检查新addRow方法的代码,你会看到
useDefValues
选项的默认值为true
defaultValue
属性。 更新:好的!现在我看到了你的问题。您在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检查当前版本(请参阅here)并在您的jquery.jqGrid.src.js
版本中执行相同的修改。无论如何,我建议在发布下一版本的jqGrid后使用$.jgrid.inlineEdit功能。优点是您可以轻松设置editRow
的选项,与调用函数的位置无关(来自inlineNav
,'actions'
格式化程序或任何其他方式。)
新的jqGridInlineEditRow
事件功能(请参阅here了解更多信息)将允许您实施类似于onInlineEdit
事件内部的操作,而无需使用oneditfunc
只能设置一次。