JqGrid 内联添加记录保存
JqGrid Inline Adding Record Save
我已经解决了很多关于在 JqGrid 中内联添加记录的问题,但我一直无法弄清楚。我有内联编辑工作并使用模式弹出窗口添加记录。我正在使用 ASP.NET MVC5 和 EF。
我的添加按钮已经与模式弹出窗口一起使用,并且记录保存到数据库中,但我需要的是将一个空行添加到网格的末尾(我正在工作)和输入字段后按下回车键时要保存到数据库的记录。预先感谢您的帮助!
我正在使用 jqgrid 版本 4.4.4。
这是我目前在控制器中使用的创建方法:
[HttpPost]
public string Create([Bind(Exclude = "TRANS_ID")] TRANSACTIONS_DETAIL tcrdetails)
{
string msg;
try{
ModelState.Remove("TRANS_ID");
if(ModelState.IsValid)
{
db.TRANSACTIONS_DETAIL.Add(tcrdetails);
db.SaveChanges();
msg = "Saved Successfully";
}
else
{
msg = "Validation data not successfull";
}
}
catch(Exception ex)
{
msg = "Error occured: " + ex.Message;
}
return msg;
}
正如您在下一个代码块中看到的那样,我的内联编辑工作正常:
$("#grid").jqGrid({
url: "/Transactions/GetTransactions/",
/*url: "/Transactions/GetTransactions/@ViewBag.hohupi",*/
addParams: {
position: "afterSelected",
addRowParams: {
// the parameters of editRow used to edit new row
keys: true,
oneditfunc: function (rowid) {
alert("new row with rowid=" + rowid + " are added.");
}
}
},
//url for inline edit
editurl: "/Transactions/Modify",
//event for inline edit
onSelectRow: function(currentSelectedRow){
if(currentSelectedRow && currentSelectedRow != $.lastSelectedRow){
//save changes in row
$('#grid').jqGrid('saveRow', $.lastSelectedRow, false);
$.lastSelectedRow = currentSelectedRow;
}
//$('#grid').jqGrid("inlineNav", "#pager", { addParams: { position: "last" } });
$('#grid').jqGrid('inlineNav', '#pager', { addParams: { position: "last" } });
//trigger inline edit for row
$('#grid').jqGrid('editRow', $.lastSelectedRow, true);
// $('#grid').jqGrid('addRow', $.lastSelectedRow, true);
},
以下代码是我为使内联添加工作而进行的多次尝试之一。我要添加空白行,但在输入所有字段后按 Enter 时无法保存它:
.navButtonAdd('#pager',{caption:"ADD", buttonicon :'ui-icon-circle-plus',onClickButton:function(id){
var newID=1;
$("#grid").find("tbody tr").each(function(){if(newID<=parseInt(this.id)){newID=parseInt(this.id)+1;}});
var datarow = {
HOH_UPI: "", ICI: "", BILL_QTR: "",
BNFT_YR: "", BNFT_MTH: "", AMOUNT: "", TRANS_TYPE: "",
CHECK_NMB: "", CHK_DT_RCVD: "", ENTRY_DT: "", NAME_ON_CHECK: "",
INDV_BATCH_NMB: "", USER_INIT: "", RTN_CHK_DT: "", LATE_DT: "", FINAL_DT: "", COMMENTS: "", Modified_date: ""
};
var su=jQuery("#grid").addRowData(newID,datarow,"last");
if (su) {jQuery("#grid").editRow(newID,true);jQuery("#grid").saveRow(newID,false);}}, title:"Add_new_row", position:"last" });
我不确定您遇到的具体问题是什么。无论如何,在复古版本 4.4.4 中使用 inlineNav
是非常糟糕的主意,因为旧版本包含许多错误。我建议你升级到 free jqGrid 4.13.1 and use new style of editing options described detailed in the wiki article。顺便说一下 position: "afterSelected"
已经在免费的 jqGrid
中实现了
重要的是使用 inlineNav
one 而不是 onSelectRow
内部。尝试只使用选项
inlineEditing: { keys: true }
允许指定 任何 editRow
的调用 的默认选项,直接在 onSelectRow
内部和间接调用 inlineNav
。
此外,我建议您使用 jqGrid 的内置 "savedRow"
参数而不是 lastSelectedRow
。您可以将代码部分从 onSelectRow
移动到 beforeSelectRow
,如 中所述。如果 saveRow
中出现错误,例如验证错误,它将执行正确的操作。
我认为不需要额外的 navButtonAdd
。无论如何,我建议您 从页面的 HTML 标记中删除 <div id="pager"></div>
并使用 pager: true
选项而不是 pager: '#pager'
.通过调用 navGrid
、inlineNav
和 navButtonAdd
,您可以 跳过 参数 '#pager'
。免费的jqGrid检测参数的类型,会自动使用grid的分页器。
我最终建议您使用 Font Awesome 并可选择 Bootstrap 而不是 jQuery UI CSS。免费的 jqGrid 支持所有功能。
我已经解决了很多关于在 JqGrid 中内联添加记录的问题,但我一直无法弄清楚。我有内联编辑工作并使用模式弹出窗口添加记录。我正在使用 ASP.NET MVC5 和 EF。
我的添加按钮已经与模式弹出窗口一起使用,并且记录保存到数据库中,但我需要的是将一个空行添加到网格的末尾(我正在工作)和输入字段后按下回车键时要保存到数据库的记录。预先感谢您的帮助!
我正在使用 jqgrid 版本 4.4.4。
这是我目前在控制器中使用的创建方法:
[HttpPost]
public string Create([Bind(Exclude = "TRANS_ID")] TRANSACTIONS_DETAIL tcrdetails)
{
string msg;
try{
ModelState.Remove("TRANS_ID");
if(ModelState.IsValid)
{
db.TRANSACTIONS_DETAIL.Add(tcrdetails);
db.SaveChanges();
msg = "Saved Successfully";
}
else
{
msg = "Validation data not successfull";
}
}
catch(Exception ex)
{
msg = "Error occured: " + ex.Message;
}
return msg;
}
正如您在下一个代码块中看到的那样,我的内联编辑工作正常:
$("#grid").jqGrid({
url: "/Transactions/GetTransactions/",
/*url: "/Transactions/GetTransactions/@ViewBag.hohupi",*/
addParams: {
position: "afterSelected",
addRowParams: {
// the parameters of editRow used to edit new row
keys: true,
oneditfunc: function (rowid) {
alert("new row with rowid=" + rowid + " are added.");
}
}
},
//url for inline edit
editurl: "/Transactions/Modify",
//event for inline edit
onSelectRow: function(currentSelectedRow){
if(currentSelectedRow && currentSelectedRow != $.lastSelectedRow){
//save changes in row
$('#grid').jqGrid('saveRow', $.lastSelectedRow, false);
$.lastSelectedRow = currentSelectedRow;
}
//$('#grid').jqGrid("inlineNav", "#pager", { addParams: { position: "last" } });
$('#grid').jqGrid('inlineNav', '#pager', { addParams: { position: "last" } });
//trigger inline edit for row
$('#grid').jqGrid('editRow', $.lastSelectedRow, true);
// $('#grid').jqGrid('addRow', $.lastSelectedRow, true);
},
以下代码是我为使内联添加工作而进行的多次尝试之一。我要添加空白行,但在输入所有字段后按 Enter 时无法保存它:
.navButtonAdd('#pager',{caption:"ADD", buttonicon :'ui-icon-circle-plus',onClickButton:function(id){
var newID=1;
$("#grid").find("tbody tr").each(function(){if(newID<=parseInt(this.id)){newID=parseInt(this.id)+1;}});
var datarow = {
HOH_UPI: "", ICI: "", BILL_QTR: "",
BNFT_YR: "", BNFT_MTH: "", AMOUNT: "", TRANS_TYPE: "",
CHECK_NMB: "", CHK_DT_RCVD: "", ENTRY_DT: "", NAME_ON_CHECK: "",
INDV_BATCH_NMB: "", USER_INIT: "", RTN_CHK_DT: "", LATE_DT: "", FINAL_DT: "", COMMENTS: "", Modified_date: ""
};
var su=jQuery("#grid").addRowData(newID,datarow,"last");
if (su) {jQuery("#grid").editRow(newID,true);jQuery("#grid").saveRow(newID,false);}}, title:"Add_new_row", position:"last" });
我不确定您遇到的具体问题是什么。无论如何,在复古版本 4.4.4 中使用 inlineNav
是非常糟糕的主意,因为旧版本包含许多错误。我建议你升级到 free jqGrid 4.13.1 and use new style of editing options described detailed in the wiki article。顺便说一下 position: "afterSelected"
已经在免费的 jqGrid
重要的是使用 inlineNav
one 而不是 onSelectRow
内部。尝试只使用选项
inlineEditing: { keys: true }
允许指定 任何 editRow
的调用 的默认选项,直接在 onSelectRow
内部和间接调用 inlineNav
。
此外,我建议您使用 jqGrid 的内置 "savedRow"
参数而不是 lastSelectedRow
。您可以将代码部分从 onSelectRow
移动到 beforeSelectRow
,如 saveRow
中出现错误,例如验证错误,它将执行正确的操作。
我认为不需要额外的 navButtonAdd
。无论如何,我建议您 从页面的 HTML 标记中删除 <div id="pager"></div>
并使用 pager: true
选项而不是 pager: '#pager'
.通过调用 navGrid
、inlineNav
和 navButtonAdd
,您可以 跳过 参数 '#pager'
。免费的jqGrid检测参数的类型,会自动使用grid的分页器。
我最终建议您使用 Font Awesome 并可选择 Bootstrap 而不是 jQuery UI CSS。免费的 jqGrid 支持所有功能。