找回密码
 立即注册

QQ登录

只需一步,快速开始

ZenosZeng 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2011-11-7 17:06  /   查看:9392  /  回复:6
在使用Spread for Asp.NET 5.0 时,我们经常会遇到这样的Case,既要对客户端输入的数据进行有效性验证,又要对原有数据进行格式化显示。

我们可以使用RegExpCellType类型来完成客户端的数据有效性验证;使用DoubleCellType类型来设置我们需要的数据显示样式,可是,我们不能兼得二者的优点。这样我们就不得不扩展CellType来实现这一需求。

下面通过扩展DoubleCellType类来讲解如何创建多功能的自定义CellType类型:

第一步:创建自定义的CellType类型 MyDoubleCellType
  1.     [Serializable()]
  2.     public class MyDoubleCellType : DoubleCellType
  3.     {
  4.         public override string ValidateEditorValue(object val)
  5.         {
  6.             string reason = null;
  7.             if (val != null && val.ToString().Length > 0)
  8.             {
  9.                 System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"^-?(0\.\d{2}|[1-9]\d*\.\d{2})$");
  10.                 if (!reg.IsMatch(val.ToString()))
  11.                 {
  12.                     reason = "请输入规范数据!(例:12.34)";
  13.                 }
  14.             }
  15.             return reason;
  16.         }

  17.         public override string EditorClientScriptUrl
  18.         {
  19.             get
  20.             {
  21.                 //指定我们自己的数据验证脚本
  22.                 return "MyDoubleEditor.htc";
  23.             }
  24.         }
  25.     }
复制代码
第二步:创建自己的数据验证逻辑 MyDoubleEditor.htc
  1. <PUBLIC:COMPONENT>
  2.   <PUBLIC:METHOD NAME="isValid">
  3.   </PUBLIC:METHOD>
  4. </PUBLIC:COMPONENT>

  5. <SCRIPT language="javascript">
  6.     function isValid(val) {
  7.             if (val != null) {
  8.                 var patt1 = new RegExp("^-?(0\\.\\d{2}|[1-9]\\d*\\.\\d{2})$");               
  9.                 var result = patt1.test(val);
  10.                 if (!result) {
  11.                     return "请输入规范数据!(例:12.34)";
  12.                 }
  13.         }
  14.         return "";
  15.     }
  16. </SCRIPT>

复制代码
第三步:使用MyDoubleCellType
  1.         protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             //设置第一列的Cell为用户自定义的MyDoubleCellType类型
  4.             MyDoubleCellType myDct = new MyDoubleCellType();
  5.             myDct.DecimalDigits = 2;
  6.             myDct.FixedPoint = true;
  7.             FpSpread1.Columns[0].CellType = myDct;
  8.         }
复制代码
开发环境:VS2010 + Srpead for Asp.NET V5.0.3524.2008
源码下载: Spread_Web_Demo_6.zip (9.98 KB, 下载次数: 1387)

6 个回复

倒序浏览
司马炎
新手上路   /  发表于:2011-12-13 20:50:00
沙发
我想问一下 spread4是否可以自定义这些?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-12-15 11:24:00
板凳

回复 2# 司马炎 的帖子

司马炎 你好,不好意思,久等了~
Spread for ASP.NET 4.0 中是可以实现该功能的。
回复 使用道具 举报
司马炎
新手上路   /  发表于:2011-12-19 10:57:00
地板
谢谢! 已经实现了
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-12-19 11:05:00
5#

回复 4# 司马炎 的帖子

客气了~:share:
回复 使用道具 举报
chcchb
论坛元老   /  发表于:2013-6-13 12:32:00
6#
学习了.
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-6-13 14:29:00
7#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部