Date 取消内联编辑后,使用自定义格式化程序释放jqGrid还原日期
取消内联编辑后,日期列返回为未定义,而不是恢复原始值。列定义如下(日期采用Date 取消内联编辑后,使用自定义格式化程序释放jqGrid还原日期,date,formatter,free-jqgrid,inline-editing,Date,Formatter,Free Jqgrid,Inline Editing,取消内联编辑后,日期列返回为未定义,而不是恢复原始值。列定义如下(日期采用1970-01-01格式): 加载网格时,日期显示为07 Aug 18,双击进入内联编辑,日期仍然是07 Aug 18。通过单击“离开”或单击“取消”按钮取消编辑后,日期变为N未定义N。刷新后,它会正确返回 取消编辑后如何保留正确的日期? 网格使用格式化程序:日期正确运行 免费jqGrid v jqGrid 4.13.5也许免费jqGrid的作者会有更好的帮助,但我建议您在调用格式化程序时添加额外的参数(action='e
1970-01-01
格式):
加载网格时,日期显示为07 Aug 18
,双击进入内联编辑,日期仍然是07 Aug 18
。通过单击“离开”或单击“取消”按钮取消编辑后,日期变为N未定义N
。刷新后,它会正确返回
取消编辑后如何保留正确的日期?
网格使用格式化程序:日期正确运行
免费jqGrid v jqGrid 4.13.5也许免费jqGrid的作者会有更好的帮助,但我建议您在调用格式化程序时添加额外的参数(action='edit')。代码如下:
formatter: function (cellvalue, options, rowObject) {
return cellvalue === ('1970-01-01') ? "" : $.fn.fmatter.call(this, "date", cellvalue, options, rowObject, "edit");
},
请注意$.fn.fmatter.call中的最后一个参数
更新
这在我的测试中起作用。
由于使用自定义日期fomatter,因此需要对savedRows中的值进行非匹配,才能正确保存。如果默认格式化程序=日期,则自动执行此操作
下面是可以使用的代码,假设您知道colModel中字段的索引:
ondblClickRow: function (rowid) {
var savedRows = $grid.jqGrid("getGridParam", "savedRow");
if (savedRows.length > 0 && savedRows[0].id !== rowid) {
// cancel editing
savedRows[0].Release_Date = $.unformat.date.call($grid[0], savedRows[0].Release_Date, $grid[0].p.colModel[1]);
$grid.jqGrid("restoreRow", savedRows[0].id);
}
if (savedRows.length === 0) {
$grid.jqGrid("editRow", rowid, editOptions);
}
}
使用哪个版本的jqGrid-Guriddo jqGrid,free jqGrid或jqGrid ver@Tony Tomov,抱歉,这是jqGrid 4.13.5不幸的是,这没有任何影响,但我只是想对你和OlegYes说声个人感谢,我在这里看到了你的逻辑,或者我可以复制并恢复原始值,但是,ondblClickRow
不被调用,当用户只需单击网格中的任意位置(即编辑模式下远离当前行)或单击Cancel
按钮…正如我在更新中所解释的那样-restoreRow调用setRowData来设置值,以防没有更改-即取消buton时,esc键等。setRowData在格式化程序日期的情况下会自动转换为原始日期,以避免混淆,但您可以使用自定义日期格式化程序。要克服这一问题,需要在savedRow数组中的每个editRow之后使用自定义代码重新格式化日期。我刚才举了一个例子。要完全解决此问题,需要在每次编辑行之后重新设置savedRow中日期字段的格式。很抱歉延迟,感谢您的帮助。我离开了一段时间。。。进一步的实验表明,问题只出现在formatoptions:{newformat:'d M y'},
上,当我将其更改为formatoptions:{newformat:'y-M-d'}时,
它完全按照预期工作。你知道为什么吗?是因为空间吗?没有任何格式选项
,默认日期格式为美式2018年7月27日
,也可以正常使用
formatter: function (cellvalue, options, rowObject) {
return cellvalue === ('1970-01-01') ? "" : $.fn.fmatter.call(this, "date", cellvalue, options, rowObject, "edit");
},
ondblClickRow: function (rowid) {
var savedRows = $grid.jqGrid("getGridParam", "savedRow");
if (savedRows.length > 0 && savedRows[0].id !== rowid) {
// cancel editing
savedRows[0].Release_Date = $.unformat.date.call($grid[0], savedRows[0].Release_Date, $grid[0].p.colModel[1]);
$grid.jqGrid("restoreRow", savedRows[0].id);
}
if (savedRows.length === 0) {
$grid.jqGrid("editRow", rowid, editOptions);
}
}