jQuery MiniUI

 找回密码
 立即注册
查看: 9583|回复: 11
打印 上一主题 下一主题

是否可以在datagrid排序之前加判断? [复制链接]

Rank: 3Rank: 3

跳转到指定楼层
楼主
发表于 2012-12-19 17:03:11 |只看该作者 |倒序浏览
想在点击列排序时先判断一下用户是否修改了数据。
<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事件没有用,为什么呢?

Rank: 8Rank: 8

沙发
发表于 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;
    }
});

Rank: 8Rank: 8

板凳
发表于 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;
    }
});

Rank: 3Rank: 3

地板
发表于 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);才会终止程序继续执行。

Rank: 8Rank: 8

5#
发表于 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);
                }
            });

Rank: 3Rank: 3

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

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

Rank: 3Rank: 3

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

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

Rank: 3Rank: 3

8#
发表于 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依然会执行排序,也就是说,不论用户点击确定还是取消,都会执行排序操作,这里怎么处理?

Rank: 8Rank: 8

9#
发表于 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()来避免保存也提示

Rank: 3Rank: 3

10#
发表于 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是多少?

Archiver|普加软件

GMT+8, 2024-11-27 07:43 , Processed in 1.047281 second(s), 9 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部