取消内联编辑后,免费的jqGrid使用自定义格式器恢复日期

时间:2018-08-08 09:40:06

标签: date formatter free-jqgrid inline-editing

取消内联编辑后,日期列将以未定义形式返回,而不是还原原始值。列定义如下(日期以1970-01-01格式显示):

{name:'Release<br>Date',index:'Street_Date', sorttype:"date", width:70,
    formatter: function (cellvalue, options, rowObject) {
        return cellvalue === ('1970-01-01') ? "" : $.fn.fmatter.call(this, "date", cellvalue, options, rowObject);
    },
    formatoptions: {newformat:'d M y'},
    editable:true,
    editoptions: {
        size:9, 
        dataInit: function(el, options) { 
                $(el).datepicker({ 
                    dateFormat: "d M y",
                    defaultDate: '01 Jan 70',
                    onSelect: function(dateText, inst) {
                    }
                });
        } 
    },
    searchoptions: {
        sopt: ['eq','ne','ge','le'],
        dataInit: function (elem) { 
            $(elem).datepicker({ showButtonPanel: true, dateFormat: 'yy-mm-dd' }) 
            } 
        }
},

内联编辑的设置如下:

ondblClickRow: function (rowid) {
    var savedRows = $grid.jqGrid("getGridParam", "savedRow");

    if (savedRows.length > 0 && savedRows[0].id !== rowid) {
        // cancel editing 
        $grid.jqGrid("restoreRow", savedRows[0].id);
    }
    if (savedRows.length === 0) {
        $grid.jqGrid("editRow", rowid, editOptions);
    }
}

加载网格后,日期显示为07 Aug 18,双击进入内联编辑,日期仍为07 Aug 18。通过单击离开或单击“取消”取消编辑后,日期变为NaN undefined N。刷新后,它可以正确返回。

在取消编辑后如何保留正确的日期? 网格在formatter: date

下的行为正确

免费的jqGrid v jqGrid 4.13.5

1 个答案:

答案 0 :(得分:0)

也许free-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中的最后一个参数

更新

这在我的测试中有效。 由于您使用的是自定义日期格式,因此需要对saveRows中的值进行无格式设置以便正确保存。如果默认的formatter = date,则会自动完成。

下面是可以使用的代码,假设您知道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);
    }
}