欢迎来到.net学习网

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

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

热门阅读

实现根据条件设置SmartGrid的单元格是否可以编辑的功能示例

创建时间:2012年05月17日 14:14  阅读次数:(31839)
分享到:
在使用SmartGrid时我们可能会有这些的需求,当前单元格需要根据另外某单元格的值来设置是否可以编辑(注意,这里是设置当前单元格是否可以编辑,而不是当前列是否可以编辑,如果是设置当前列,使用列的ReadOnly属性即可)。

朋友们在看到该功能时可能首先会想到能在绑定数据的时候来设置,因为大部分的数据控件都是这样做的,但SmartGrid控件好像并没有提供单元格绑定事情,所以这里我们换一个思路,在该单元格得到焦点时再来做设置。

下面开始示例:
先在aspx页面放置一个SmartGrid控件,该控件有两列,"姓名"列与"月薪",我们要实现的功能是:当"姓名"列中的值为"张三"时,"月薪"列不可编辑。
SmartGrid控件代码如下:
<SmartWeb:SmartGrid ID="SmartGrid1" runat="server" ReadOnly="false" Height="200" 0n>
<Columns>
<SmartWeb:TextBoxColumn HeaderText="姓名" ColumnName="name" />
<SmartWeb:TextBoxColumn HeaderText="月薪" ColumnName="salary" EditorClientScriptUrl="MyText.htc" ExtendedProperties="<?xml version='1.0'?><Info><RefInfo></RefInfo></Info>" />
</Columns>
</SmartWeb:SmartGrid>

可以看到,我们为"月薪"列绑定了htc文件,对了,该功能还是在htc中来实现。(在SmartGrid控件中,htc文件好像是万能的了,我们很多功能都得依赖它来实现)

MyText.htc的代码很简单,如下:
<script language="javascript">

function focus() {
    if (SetDisabled(grid, columnName, grid.row) == false) {
        element.disabled = 'disabled';
        return;
    }
    else {
        element.disabled = false;
    }
}

</script>

我们focus方法中根据SetDisabled返回的值来设置当前单元格是否可以编辑,如果SetDisabled方法返回false,则将当前单元格设置为不可编辑,反之设置为可编辑。为方便扩展,我们将SetDisabled方法放在具体的aspx页面来实现。

因为在SetDisabled方法中已经包含了SmartGrid对象:grid,当前列的列名:columnName,当前行的行号:grid.row,所以在aspx页面取数据就非常简单了,代码如下:
<script type="text/javascript" language="javascript">
    function SetDisabled(grid, columnName, row) {
        var value = grid.getCellValue(row, "name");
        if (value == "张三") {
            return false;
        }
        else {
            return true;
        }
    }
</script>

这就实现了我们要实现的功能。殑v E
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

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

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

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

最新评论

共有评论9条
  • #1楼  评论人:匿名  评论时间:2012-5-17 14:53:55
  • 谢谢,又解决了一个大问题
  • #2楼  评论人:Wyf  评论时间:2012-5-17 16:13:21
  • 呵呵,不客气!
  • #3楼  评论人:匿名  评论时间:2012-7-6 9:38:40
  • lz,还是这个问题,如果这里是下拉的怎么做
  • #4楼  评论人:匿名  评论时间:2012-7-6 9:51:19
  • 我用
    <PUBLIC:PROPERTY NAME="value" GET="getValue" PUT="setValue"/>
    这个可以实现不能编辑。
    但是当允许编辑的时候,用键盘上下不能选择了。只能鼠标才能选了。
  • #5楼  评论人:匿名  评论时间:2012-7-6 10:09:55
  • ExtendedProperties和EditorClientScriptUrl同时出现,并在htc中处理focus,那么就出现,麻烦lz看看能不能解决。或者有什么好的解决办法。
  • #6楼  评论人:Wyf  评论时间:2012-7-6 10:28:12
  • 如果在focus事件中不好处理,你可以将
    if (SetDisabled(grid, columnName, grid.row) == false) {
    element.disabled = 'disabled';
    return;
    }
    else {
    element.disabled = false;
    }

    这一段代码移到init事件中试试
    function init() {
    if (SetDisabled(grid, columnName, grid.row) == false) {
    ……}
    }
  • #7楼  评论人:匿名  评论时间:2012-7-6 10:36:10
  • 好像确实可以,我再测试一下,lz太厉害了。init应该比focus更好。在绑定的时候就确定了。
  • #8楼  评论人:Wyf  评论时间:2012-7-6 11:56:05
  • 呵呵,过奖了,你再测试测试吧。
  • #9楼  评论人:匿名  评论时间:2012-11-29 10:55:09
  • 要是有贴图就好了
发表评论:
留言人:
内  容:
请输入问题 0+67=? 的结果(结果是:67)
结  果: