jqgrid に新しい行を追加し、ユーザーがインライン編集できるようにし、[保存] ボタンをクリックして保存し、追加されたデータでグリッドを自動的にリロードしようとしています。
私の問題は、プロセスのリロード部分にあります。
jqgrid 宣言:
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");
}
});
}
saveRow コード:
function SaveNewRow(rowId)
{
var saveparameters = {
"successfunc": null,
"url": '@Url.Content("~\\MessagesAndDeliveryInfo\\SaveNewMessage\\")',
"extraparam": { decisionImpId: '@Model.DecisionImplementationId' },
"aftersavefunc": reload,
"errorfunc": function (rowId, result, postedData) { alert(result.responseText); restoreRow(rowId); },
"afterrestorefunc": null,
"restoreAfterError": true,
"mtype": "POST"
}
jQuery("#gridMsg").jqGrid('saveRow',rowId, saveparameters);
}
function reload(rowid, result) { $("#gridMsg").trigger("reloadGrid"); }
上記のコードは、グリッドをリロードするまで正常に機能します。新しい行がサーバーに保存され、aftersavefunc が呼び出されても、グリッドはリロードされず、追加された行は編集可能モードのままです。ナビゲーション バーのリロード グリッドを手動でクリックしたときにのみ、グリッドがリロードされ、新しい行が正常に表示されます。
誰かが私を助けてくれることを願っています。