怎样设置SmartGrid的单元格是否可以编辑
在使用SmartGrid时我们可能会有这样的需求,当前单元格需要根据另外某单元格的值来设置是否可以编辑,下面我们按步骤来一步一步的实现。
步骤/方法
- 01
先在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>
- 02
可以看到,我们为"月薪"列绑定了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页面来实现。
- 03
因为在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> 这就实现了我们要实现的功能。