jQuery MiniUI

标题: 是否可以在datagrid排序之前加判断? [打印本页]

作者: johnconner    时间: 2012-12-19 17:03:11     标题: 是否可以在datagrid排序之前加判断?

想在点击列排序时先判断一下用户是否修改了数据。
<div field="id" width="80" headerAlign="left" allowSort="true">用户编号</div>
function cc(){
            var count = grid.getChanges().length;
            if(count>0){
                if(confirm("数据未保存将丢失,继续此操作?"))
                    return false;
                else
                    grid.setChanges(0);                     
            }
        }
在列上加了onclick事件没有用,为什么呢?

作者: factory    时间: 2012-12-19 17:18:49

监听onbeforeload事件,判断grid.getChanges().length,如果有修改则e.cancel = true
grid.on("beforeload", function (e) {
    var data = grid.getChanges();
    if (data.length > 0) {
        alert("请先保存");
        e.cancel = true;
    }
});
作者: factory    时间: 2012-12-19 17:18:55

监听onbeforeload事件,判断grid.getChanges().length,如果有修改则e.cancel = true
grid.on("beforeload", function (e) {
    var data = grid.getChanges();
    if (data.length > 0) {
        alert("请先保存");
        e.cancel = true;
    }
});
作者: johnconner    时间: 2012-12-19 21:39:43

factory 发表于 2012-12-19 17:18
监听onbeforeload事件,判断grid.getChanges().length,如果有修改则e.cancel = true
grid.on("beforeload", ...

这个方法我用过了,问题是如果用户点击了保存,也会询问用户,如何获得用户点击的是保存按钮我没找到。而且e.cancel = true;没什么效果,grid依然会reload,我用了grid.setChanges(0);才会终止程序继续执行。
作者: factory    时间: 2012-12-20 10:09:29

johnconner 发表于 2012-12-19 21:39
这个方法我用过了,问题是如果用户点击了保存,也会询问用户,如何获得用户点击的是保存按钮我没找到。而 ...

其实是保存好的,只不过在success里面reload的时候出了问题
你在reload前面加上grid.accept();清除掉所有修改痕迹,就不会触发这个问题了
$.ajax({
                url: "../data/AjaxService.aspx?method=SaveEmployees",
                data: { data: json },
                type: "post",
                success: function (text) {
                    grid.accept();                //清除所有修改痕迹
                    grid.reload();
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    alert(jqXHR.responseText);
                }
            });
作者: johnconner    时间: 2012-12-20 10:40:25

factory 发表于 2012-12-20 10:09
其实是保存好的,只不过在success里面reload的时候出了问题
你在reload前面加上grid.accept();清除掉所有 ...

被你搞的有点糊涂了,现在不是清除修改痕迹的问题,现在问题是当数据修改后用户点击任何会导致grid重新load的事件都提示用户数据未保存,也包括点击“保存”按钮,现在就是想把保存按钮踢出,用户点击保存时是属于正确操作,无需提示用户数据会丢失,而其他像排序、分页、查询等都需要提示用户数据未保存。
作者: johnconner    时间: 2012-12-20 10:53:25

factory 发表于 2012-12-20 10:09
其实是保存好的,只不过在success里面reload的时候出了问题
你在reload前面加上grid.accept();清除掉所有 ...

实在没办法只能把排序事件改成双击触发,问一下应该怎么改?因为在行内编辑时,经常误操作点到了列头上而导致被排序,如果改成双击是不是会好点?可以改吗?
作者: johnconner    时间: 2012-12-20 11:21:02

factory 发表于 2012-12-20 10:09
其实是保存好的,只不过在success里面reload的时候出了问题
你在reload前面加上grid.accept();清除掉所有 ...

呵呵,领导,是不是把你问烦了,不好意思昂,现在监听表头点击事件
grid.on("headercellclick",function(e){
            var data = grid.getChanges();
            if(data.length>0){
                if(confirm("数据未保存将丢失,继续此操作?"))
                    return false;
                else
                    e.cancel = true;
            }
        });
问题是else e.cancel = true;没起什么作用,grid依然会执行排序,也就是说,不论用户点击确定还是取消,都会执行排序操作,这里怎么处理?
作者: factory    时间: 2012-12-20 13:56:39

johnconner 发表于 2012-12-20 11:21
呵呵,领导,是不是把你问烦了,不好意思昂,现在监听表头点击事件
grid.on("headercellclick",function( ...

1。不是啊,我上面不是说了么,
grid.accept();                //清除所有修改痕迹
清除掉增删改的修改痕迹之后,
var data = grid.getChanges();
    if (data.length > 0) {
getChanges()就获取不到了,下面的判断也就不会生效。
也就不会出提示数据未保存了

2.e,cancel是针对beforeload事件的。不要用到headercellclick事件里面去


反正你按照我上面说的,用beforeload事件来处理未保存数据的时候,提示保存,
在ajax提交保存的时候,在success里面用,在grid.load()前面添加 grid.accept()来避免保存也提示
作者: johnconner    时间: 2012-12-20 16:44:40

本帖最后由 johnconner 于 2012-12-20 16:48 编辑
factory 发表于 2012-12-20 13:56
1。不是啊,我上面不是说了么,
grid.accept();                //清除所有修改痕迹
清除掉增删改的修改 ...


按照你说的可以了,还有点小问题:
grid.on("beforeload",function(e){
            var data = grid.getChanges();
            if(data.length>0){
                if(confirm("数据未保存将丢失,继续此操作?"))
                    e.ok = true;          //正规是不是应该这样写吧?不应该return false吧?      
                else
                    e.cancel = true;
            }
        });
e.cancel = true;终止了排序继续执行,但是页面上的loading提示框一直在,我用grid.unmask();也没去掉它。用mini.hideMessageBox(messageId);也不知道这个loading提示框的id是多少?

作者: factory    时间: 2012-12-20 17:03:03

johnconner 发表于 2012-12-20 16:44
按照你说的可以了,还有点小问题:
grid.on("beforeload",function(e){
            var data = grid.get ...

你做了什么操作又出现loading框一直存在?
隐藏loading框的确是grid.unmask();你看下是不是grid.unmask();的时机不对,在grid.load()之前就grid.unmask();了,导致grid.unmask();无效
作者: johnconner    时间: 2012-12-21 11:05:44

factory 发表于 2012-12-20 17:03
你做了什么操作又出现loading框一直存在?
隐藏loading框的确是grid.unmask();你看下是不是grid.unmask() ...

老大,我算是服了,昨天这样写的
grid.on("beforeload",function(e){
            var data = grid.getChanges();
            if(data.length>0){
                if(confirm("数据未保存将丢失,继续此操作?"))
                    e.ok = true;
                else{
                    e.cancel = true;
                    grid.unmask();
                }
            }
        });
load提示框一直存在,今天这样写的
grid.on("beforeload",function(e){
            var data = grid.getChanges();
            if(data.length>0){
                if(confirm("数据未保存将丢失,继续此操作?"))
                    e.ok = true;
                else
                    e.cancel = true;
                grid.unmask();
            }
        });
结果啥问题都没有了,我就真奇了怪了。真是非常感谢你啊!




欢迎光临 jQuery MiniUI (http://miniui.com/discuss/) Powered by Discuz! X2