Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 取消内联编辑后,使用自定义格式化程序释放jqGrid还原日期_Date_Formatter_Free Jqgrid_Inline Editing - Fatal编程技术网

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);
    }
}