在使用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>
这就实现了我们要实现的功能。殑vE