Jquery 保存行成功后,jqgrid不会重新加载
我正在尝试向my jqgrid添加新行,允许用户内联编辑,通过单击“保存”按钮保存,然后使用添加的数据自动重新加载网格 我的问题是进程的重新加载部分: jqgrid减容:Jquery 保存行成功后,jqgrid不会重新加载,jquery,jqgrid,Jquery,Jqgrid,我正在尝试向my jqgrid添加新行,允许用户内联编辑,通过单击“保存”按钮保存,然后使用添加的数据自动重新加载网格 我的问题是进程的重新加载部分: jqgrid减容: jQuery("#gridMsg").jqGrid({ url: '@Url.Content("~\\MessagesAndDeliveryInfo\\GetMessageAndDeliveryForDecisionImplementation\\")' + '?decisionImplementationId
jQuery("#gridMsg").jqGrid({
url: '@Url.Content("~\\MessagesAndDeliveryInfo\\GetMessageAndDeliveryForDecisionImplementation\\")' + '?decisionImplementationId=' + '@Model.DecisionImplementationId',
datatype: "json",
contenttype: "application/json; charset=utf-8",
mytype: "GET",
editurl: '@Url.Content("~\\MessagesAndDeliveryInfo\\SaveExistingMessage\\")',
colNames: ['Msg No.', 'Date', 'Delivery Mode', 'Delivery Number', 'Confirmation Mode', 'Confirmation Date', 'IsVoucherCreated', 'Id'],
colModel: [
{ name: 'MessageNumber', index: 'MessageNumber', width: 90 },
{ name: 'ProjectionDate', index: 'ProjectionDate', width: 90 },
{ name: 'DeliveryMode', index: 'DeliveryMode', width: 140, editable: true, edittype: "select", editoptions: { value: '@Model.DeliveryModeSelectOptions' }, formatter: showTextFmatter, unformat: unformatShowText },
{ name: 'DeliveryNumber', index: 'DeliveryNumber', width: 150, editable: true, edittype: "text" },
{ name: 'DeliveryConfirmationMode', index: 'DeliveryConfirmationMode', width: 110, align: "right", editable: true, edittype: "select", editoptions: { value: '@Model.DeliveryConfirmationModeSelectOptions' }, formatter: showTextFmatter, unformat: unformatShowText },
{ name: 'LegalDeliveryDate', index: 'LegalDeliveryDate', width: 90, align: "right", editable: true },
{ name: 'IsVoucherCreated', index: 'IsVoucherCreated', width: 90, align: "right", editable: false, hidden: true },
{ name: 'IdForSendMailService', index: 'IdForSendMailService', width: 90, align: "right", editable: false, hidden: true },
],
rowNum: 10,
rowList: [10, 20, 30],
pager: '#pagerMsg',
direction: "rtl",
viewrecords: true,
caption: "Messages",
onSelectRow: function (id) {
if (id && id != lastsel2) {
jQuery('#gridMsg').jqGrid('restoreRow', lastsel2, function (response) { debugger; });
jQuery('#gridMsg').jqGrid('editRow', id, true);
lastsel2 = id;
}
},
jsonReader: {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: false,
cell: "cell",
id: "id",
userdata: "userdata"
},
loadError: function (jqXHR, textStatus, errorThrown) {
debugger;
}
});
jQuery("#gridMsg").jqGrid('navGrid', '#pagerMsg', { edit: false, add: false, del: false });
添加和编辑行代码:
function AddRowToGrid()
{
rowId = 99;
var mydata = [
{ MessageNumber: rowId, ProjectionDate: '@DateTime.Now.ToShortDateString()', DeliveryMode: '@Model.OPTIONS_DEFAULT_VALUE', DeliveryNumber: "", DeliveryConfirmationMode: '@Model.OPTIONS_DEFAULT_VALUE', LegalDeliveryDate: "", IsVoucherCreated: false, IdForSendMailService: null }
];
//add row
for (var i = 0; i <= mydata.length; i++)
jQuery("#gridMsg").jqGrid('addRowData', rowId, mydata[i]);
//edit added row
jQuery("#gridMsg").jqGrid('editRow', rowId,
{
keys: true,
oneditfunc: function () {
//debugger;//alert("edited");
}
});
}
}
在重新加载网格之前,上述代码工作正常:即使新行已保存在服务器中并调用了aftersavefunc:网格未重新加载,添加的行仍处于可编辑模式。
只有当我在导航栏中手动单击“重新加载网格”时,网格才会重新加载,然后我才能看到新行
希望有人能帮助我,
事先多谢 我找到了问题的原因 我在colModel中有两个edittype='select'的可编辑列,这些列从url接收数字代码,并使用formatter和unformat(colModel的)来显示合适的文本 格式化功能包括:
function showTextFmatter(cellvalue, options, rowObject) {
var vts = {};
if (options.colModel.editoptions.values == undefined) {
vtStr = options.colModel.editoptions.value.split(';');
for (var i = 0; i < vtStr.length; i++) {
kv = vtStr[i].split(':'); vts[kv[0]] = vtStr[i];
}
options.colModel.editoptions.values = vts;
}
if (options.colModel.editoptions.values[cellvalue] != "" && options.colModel.editoptions.values[cellvalue] != undefined)
return options.colModel.editoptions.values[cellvalue].split(':')[1];
return cellvalue;
}
function unformatShowText(cellvalue, options) {
return cellvalue.split(':')[0];
}
此错误导致重新加载\还原失败
我只是在有问题的行之前添加了一个条件:
&& options.colModel.editoptions.values[cellvalue] != undefined
问题解决了。您没有在线页面要查看吗?尽管有两件事看起来很可疑:为什么你的重载函数有参数?你叫它没有,它也不需要@MichaelLumbroso谢谢。对不起,我没有联机页面。我在网上的某个地方找到了reload函数,它具有传递给aftersavefunc的参数,并且工作正常。重新加载网格已触发,但网格实际上并未重新加载。你还发现什么可疑的东西吗?如果有帮助的话,即使我只是内联编辑现有行并按enter键进入editurl页面,当它成功返回时,该行仍然处于可编辑模式,并且没有被重新加载。没有联机页面,我也做不了什么。检查错误控制台以查看是否有信息!
function showTextFmatter(cellvalue, options, rowObject) {
var vts = {};
if (options.colModel.editoptions.values == undefined) {
vtStr = options.colModel.editoptions.value.split(';');
for (var i = 0; i < vtStr.length; i++) {
kv = vtStr[i].split(':'); vts[kv[0]] = vtStr[i];
}
options.colModel.editoptions.values = vts;
}
if (options.colModel.editoptions.values[cellvalue] != "" && options.colModel.editoptions.values[cellvalue] != undefined)
return options.colModel.editoptions.values[cellvalue].split(':')[1];
return cellvalue;
}
function unformatShowText(cellvalue, options) {
return cellvalue.split(':')[0];
}
return options.colModel.editoptions.values[cellvalue].split(':')[1];
&& options.colModel.editoptions.values[cellvalue] != undefined