1

我有这样的事情:

 CELL #0      CELL #1
------------------------
|start_date | end_date |
|----------------------|
|1/1/2012   |1/1/2013  |  ROW#0
|----------------------|

我想断言,如果用户单击 (Row0,Cell0) 并尝试更改开始日期,则开始日期必须小于结束日期,否则不会进行更改。这可能吗?

目前在创建列时,我添加了一个“验证器”属性并传入下面的函数

startDateValidator(value){ 
   /* value is new value, need to reference the end_date to make sure
      that value < end_date but not possible in this column validator */
}

但正如评论指出的那样,我们得到了新值,但没有引用旧数据项。有没有办法解决这个问题?我可以更改来源,但如果可能的话希望避免。

4

2 回答 2

1

可以onCellChange在网格事件中执行此操作,我从以前的实现中删除了一些代码,所以如果它第一次不起作用,请不要对我太苛刻...假设您的两个日期的 ID是start_dateend_date,那么这里是一个工作概念:

grid.onCellChange.subscribe(function(e,args) {
    // do a proper validation of date
    if (args.item.start_date < args.item.end_date) {
        // post/save result to DB and re-render the grid
        $.post('yourAjaxFile.php?action=update', args.item, function(ServerResponseUpt) {   
            // success, update the datagrid view on screen
            grid.updateRow(args.row);
            grid.updateRowCount();
            grid.render();
        });
    }else {
        // invalid, undo the changes from grid, this will put back orginal value
        var command = commandUndoQueue.pop();
        if (command && Slick.GlobalEditorLock.cancelCurrentEdit()) {
            command.undo();
            grid.gotoCell(command.row, command.cell, false);
        }                     
    }                         
});

请注意,这里的日期验证显然是不正确的,尽管主要答案更侧重于如何实现其余的事件

于 2013-04-17T04:49:40.827 回答
0

使用OnBeforeEdit代替onCellChange

grid.onBeforeEditCell.subscribe(function (e, args) {
    //返回true会更新cell,返回false不会更新
}
于 2013-08-08T17:41:43.887 回答