欢迎来到.net学习网

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

您当前所在位置:首页 » SmartGrid使用教程 » 正文

冻结SmartGrid的列与禁止栏位编辑

创建时间:2012年03月10日 22:54  阅读次数:(4720)
分享到:

一、当某个栏位的值符合一定条件时禁止其它栏位编辑(enableCell的使用)


enableCell函数作用:设置某单元格是否可以编辑
程序思路:
(1)设置栏位的EditorClientScriptUrl属性为htc的地址,该属性获取或设置列编辑器的客户端HTC文件,主要用于在编辑状态提供校验、键盘事件处理等,默认是空。
(2)在htc文件中捕获onchange事件(编辑器实际上是TextBox)
<PUBLIC:ATTACH EVENT="onchange" ONEVENT="onChange()" / >
(3)在htc文件中编写onchange事件代码,根据条件动态设置相应栏位是否可编辑
function onChange()
{
if(columnName == "num" )
{
if(value !=""&&parseInt(value)==100)
{
grid.enableCell("price",false);
}
else
{
grid.enableCell("price",true);
}
}
}

(4)htc文件中还应包括其他必要的属性和方法,完整的示例代码如下:
<PUBLIC:COMPONENT >
<PUBLIC:PROPERTY NAME="grid"/ ><!--返回当前的Grid,通过该属性,可以访问当前Grid的相关信息-- >

<!--和.Net中的DataColumn的定义类似-- >
<PUBLIC:PROPERTY NAME="columnName"/ > <!--列名-- >
<PUBLIC:PROPERTY NAME="dataType"/ ><!--数据类型,如System.String,和SmartGridColumn上的DataType的值保持一致-- >
<PUBLIC:PROPERTY NAME="allowNull"/ ><!--是否允许为空-- >
<PUBLIC:PROPERTY NAME="scale"/ >
<PUBLIC:PROPERTY NAME="precision"/ ><!--精度,主要用于数字型-- >
<PUBLIC:PROPERTY NAME="maxLength"/ ><!--最大长度,主要用于文本-- >
<PUBLIC:PROPERTY NAME="extendedProperties"/ ><!--一般用xml串,因为在存储很多信息时,解析非常方便-- >
<!--
<PUBLIC:METHOD NAME="select"/ > //全选。由于文本编辑框只是由INPUT组成,所以不需要改写(重载)select方法
-- >
<!--
<PUBLIC:METHOD NAME="focus" > //置焦点。由于文本编辑框只是由INPUT组成,所以不需要改写(重载)focus方法
-- >
<!--
<PUBLIC:PROPERTY NAME="input"  GET="getInput"/ > //由于文本编辑框只是由INPUT组成,所以不需要改写(重载)focus方法
-- >
<!--
<PUBLIC:PROPERTY NAME="value"  GET="getValue" PUT="setValue"/ > //由于文本编辑框只是由INPUT组成,Input有value属性,所以不需要改写(重载)focus方法
-- >
<PUBLIC:ATTACH EVENT="onchange" ONEVENT="onChange()" / >
</PUBLIC:COMPONENT >

<script language="javascript" >
function onChange()
{
if (columnName == "PlanHours")
{
if(value !=""&&parseInt(value) >8)
{
grid.enableCell("PlanBeginDate", false);
}
else
{
grid.enableCell("PlanBeginDate", true);
}
}
}
</script >

二、冻结列


(1)通过将栏位定义在标签<FrozenColumns >内可以使其成为冻结列
(2)通过编程方法将栏位设置为冻结列。目前SmartGrid的动态设置冻结列有问题,除非所有栏位都是通过编程方式动态加入(区别于前台声明式的栏位定义),否则任何触发后台事件都会报错,不要通过编程方式冻结列。
示例如下:
this.SmartGrid1.FrozenColumns.Clear();
this.SmartGrid1.FrozenColumns.Add("TaskCode");
this.SmartGrid1.FrozenColumns.Add("TaskName");

正确方式应该在前台添加,示例如下:
<SmartWeb:SmartGrid ID="grid" runat="server" AllowAdd="False" AllowDelete="True" ColumnMovable="true"  ReadOnly="False" ColumnSizeable="true" RowHeaderVisible="True" TotalRowVisible="true" >
<FrozenColumns >
<SmartWeb:SmartGridColumn ColumnName="XXX" HeaderText="XXX" / >
<SmartWeb:SmartGridColumn ColumnName="XXX" HeaderText="XXX" / >
<SmartWeb:SmartGridColumn ColumnName="XXX" HeaderText="XXX" / >
</FrozenColumns >
</SmartWeb:SmartGrid >

三、显示合计行


(1)SmartGrid的TotalRowVisible属性用来获取或设置一个值,该值指定合计行是否可见,语法:TotalRowVisible=”true”。
(2)可以通过设置栏位的AllowTotal属性用来获取或设置一个值,该值指示是否对该列的值进行合计。如果有合计行,则合计的值显示在合计行上,默认为不合计。合计列放置在该列在合计行上的正下方。
(3)可以通过设置栏位的MonetaryAmountInWords属性用来获取或设置一个值,该值指示是否对合计行中金额列的值进行大写。默认不大写。必须设置DataType=”money”才会有效。
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:】

打赏

取消

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

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

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

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 35+70=? 的结果(结果是:105)
结  果: