欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

在SmartGrid控件中响应CheckBoxColumn列的选择事件示例

创建时间:2012年04月13日 15:05  阅读次数:(6317)
分享到:
在SmartGrid控件中,我们要如何来定义CheckBoxColumn列的选择与取消选择事件呢?现在开始该功能的演示:

一、响应前台事件


1,为要响应Checked事件的列绑定一个htc文件。代码如下:
<SmartWeb:CheckBoxColumn ColumnName="IsSelected" HeaderText="选择" EditorClientScriptUrl="../../htc/Check.htc" / >

2,在htc文件中触发事件,代码如下:
<script language="javascript" >
    element.onclick = Click;

    function Click() {
        debugger;
        var gridobj = 
element.parentElement.parentElement.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.par
entNode.parentNode;
        var rowindex = element.parentNode.parentNode.parentNode.rowIndex;

        var KeyFieldNameValue = gridobj.getCellValue(rowindex, "ID");
        if (element.checked) {
            alert("这是htc测试:你选择了第" + (rowindex+1) + "行,该行的ID值为" + KeyFieldNameValue + "");
        }
        else {
            alert("这是htc测试:你取消选择了第" + (rowindex + 1) + "行,该行的ID值为" + KeyFieldNameValue + "");
        }
    }
</script >

从上面示例中可以看到,我们不仅可以获取到用户是选择(或取消选择)了那一行数据。然后还可以通过getCellValue方法来获取该行的任何字段的值。非常的方便。

3,在页面文件中触发事件。
如果我们需要将用户选择(或取消选择)的方法放到页面上来定义,那么可以在htc指定响应事件,然后在页面上来定义事件,先改写htc中的代码如下:
<script language="javascript" >
    element.onclick = web_Click;
    function web_Click() {
        var gridobj = 
element.parentElement.parentElement.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.par
entNode.parentNode;
        var rowindex = element.parentNode.parentNode.parentNode.rowIndex;
        webClick(gridobj, (rowindex + 1), element.checked)
    }
</script >

在上面代码中可以看到,我们先在htc获取到了smartgrid的端客户对象和用户操作的行号,再和用户的操作(选择还是取消选择)一起传递到webClick方法中,那么接下来,我们只需要在页面中定义webClick事件就可以了,示例如下:
<script type="text/javascript" language="javascript" >
    function webClick(grid, row, checked) {
        var KeyFieldNameValue = grid.getCellValue(row, "ID");
        if (checked) {
            alert("这是页面测试:你选择了第" + row + "行,该行的ID值为" + KeyFieldNameValue + "");
        }
        else {
            alert("这是页面测试:你取消选择了第" + row + "行,该行的ID值为" + KeyFieldNameValue + "");
        }
    }
</script >

二、响应后台事件


以上两个方法都可以响应前台事件,那么我们如何实现用户选择或取消选择时回发页面,响应后台事件呢?其实也很简单,在页面上放一个辅助按钮,再利用__doPostBack方法,就能轻松实现。比如,我们将上面的htc代码改写如下:
<script language="javascript" >
    element.onclick = Click;

    function Click() {
       __doPostBack('辅助按钮的客户端ID', '');
    }
</script >


这样,我们就实现了后台回发事件。p
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论14条
  • #1楼  评论人:匿名  评论时间:2012-4-14 11:10:05
  • 确实可以,谢谢lz了。
  • #2楼  评论人:Wyf  评论时间:2012-4-16 0:05:36
  • 不客气,有空多交流
  • #3楼  评论人:匿名  评论时间:2012-7-23 15:34:20
  • lz,这里如果我不在点击的时候就去element.checked状态,我要在其他地方取,用grid.getCellValue(rowindex, "IsSelected");取得又不对了
  • #4楼  评论人:Wyf  评论时间:2012-7-24 8:55:55
  • 不点击的情况下,你取到的值可能是空,也可能是0,也可能是"false",这三种情况你都可以视为未选中,如果是1或者"true"的情况下,你就可以视为选择中了。
  • #5楼  评论人:匿名  评论时间:2012-7-24 9:32:49
  • 我用另外一个列来判断,这个问题解决了,但是又发现一个问题,复选列绑定的'false',即不选中,在不可编辑的状态下是对的,但是改变为可编辑之后,竟然变成了选中状态。
  • #6楼  评论人:匿名  评论时间:2012-7-24 9:44:48
  • 现在问题是这样的,在htc里面,在改变复选框状态的时候,我调用一个函数,如果表格是从不可编辑变为可编辑之后再操作,那么第一次取grid对象是空的,第二次才能取到,也就是要触发另外一个函数,得点2次复选框,
    后来我用
    grid =grid||element.parentElement.parentElement.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
    这样grid可以取到,但是第一行的rowindex变成了-1,而不是0.
  • #7楼  评论人:匿名  评论时间:2012-7-24 9:52:01
  • 不好意思,可能说得有点乱,我整理一下,2点:
    前提:表格由不可编辑变为可编辑(就是点击一个修改按钮)
    1.复选框状态发生了改变。
    2.取不到grid对象,取到之后,rowindex也不对。
  • #8楼  评论人:Wyf  评论时间:2012-7-24 15:56:17
  • 这个可能帮不到你了,我没有用到在可编辑与不可编辑之间的转换,不好意思!
  • #9楼  评论人:匿名  评论时间:2012-7-24 16:45:01
  • 上面说的要点2次的情况,就是因为相应状态的问题,还有就是取index不对,我通过
    var rowIndex= grid.row<0?0:grid.row;
    强制转了,暂时没发现问题。
    状态变化的,我只能在服务器端重新给相应列赋值之后解决。谢谢lz
  • #10楼  评论人:Wyf  评论时间:2012-7-25 8:41:53
  • 呵呵,不客气,解决了就好。
  • #11楼  评论人:匿名  评论时间:2012-9-7 16:18:26
  • LZ,结合你前面一个全选复选框的,我想修改其中一个复选框的状态之后,点击表头的全选,然后下面的所有状态都和我修改这个一样的,如果不用htc的话,要先让复选框失去焦点,这个修改状态才能变,如果用了htc,连这个效果也没有了,结合你这个也不行了,能不能麻烦你看看。
  • #12楼  评论人:Wyf  评论时间:2012-9-10 13:31:52
  • 不太明白你的意思?你是不是想批量赋值?
  • #13楼  评论人:匿名  评论时间:2012-9-12 9:40:13
  • 是的,但是如果是下拉或者文本框的话,是可以实现的,但是复选框赋值没用,可以改变复选框状态,但是值是没有变的,给相应列赋布尔值也不行。
  • #14楼  评论人:Wyf  评论时间:2012-9-12 15:45:43
  • 我是利用这个下面这个方法实现全选功能的,是有效的。你可以试试
    为SmartGrid控件的CheckBoxColumn列设置全选与取消全选的功能
    http://www.lmwlove.com/ac/ID810
发表评论:
留言人:
内  容:
请输入问题 77+16=? 的结果(结果是:93)
结  果: