[DevExpress]DxValidationProvider分享
前些日子从研究所临时调回公司,帮忙做另外一个项目的控件验证工作,其实内容非常的简单,就是将用户即将提交至服务器的数据先做一个本地验证,以达到减少服务器压力、提高用户体验的目的。

public class CustomValidation
{
private DXValidationProvider provider; /// <summary>
/// 条件列表
/// </summary>
public List<ControlRule> RuleList { get; set; } public CustomValidation()
{
provider = new DXValidationProvider();
} /// <summary>
/// 执行验证
/// </summary>
/// <returns></returns>
public bool Validate()
{
bool flag = true;
if (provider != null)
{
provider.Dispose();
}
if (RuleList != null)
{
foreach (ControlRule item in RuleList)
{
provider.SetIconAlignment(item.control, ErrorIconAlignment.MiddleRight);
provider.SetValidationRule(item.control, item.rule);
//if (!provider.Validate() && flag)
//{
// flag = false;
//}
}
flag = provider.Validate();
}
else
{
flag = false;
}
return flag;
}
}
自定义验证类
public class CustomRuleByRegex : ValidationRule
{
string regex;
bool isnotblank;//是否为空
/// <summary>
/// 是否为数字
/// </summary>
public static string strIsNumeric = "^[\\+\\-]?[0-9]*\\.?[0-9]+$";
/// <summary>
/// 电话号码
/// </summary>
public static string strPhone = @"(^(\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$|(1(([35][0-9])|(47)|[8][01236789]))\d{8}$"; /// <summary>
/// 使用正则表达式验证
/// </summary>
/// <param name="regex">正则表达式</param>
/// <param name="isnotblank">是否允许为空</param>
public CustomRuleByRegex(string regex, bool isnotblank)
{
this.regex = regex;
this.isnotblank = isnotblank;
} public override bool Validate(Control control, object value)
{
bool flag;
try
{
if (value == null || value.ToString().Trim() == string.Empty)
{
if (isnotblank)
{
flag = true;
}
else
{
flag = false;
this.ErrorText = "该值不允许为空!";
}
}
else
{
flag = Regex.IsMatch((string)value, regex);
}
}
catch (Exception ex)
{
this.ErrorText = ex.Message;
flag = false;
}
return flag;
}
}
自定义规则类
public class ControlRule
{
public Control control;
public ValidationRule rule; public ControlRule(Control control, ValidationRule rule)
{
this.control = control;
this.rule = rule;
} /// <summary>
/// 判断控件是否为空
/// </summary>
/// <returns></returns>
public static ConditionValidationRule NotEmpty()
{
ConditionValidationRule rule = new ConditionValidationRule();
rule.ConditionOperator = ConditionOperator.IsNotBlank;
rule.ErrorText = "该值不允许为空!";
return rule;
} /// <summary>
/// 判断是否大于等于某个数
/// </summary>
/// <param name="number">数值</param>
public static ConditionValidationRule NoLessNumber(decimal number)
{
ConditionValidationRule rule = new ConditionValidationRule();
rule.ConditionOperator = ConditionOperator.GreaterOrEqual;
rule.ErrorText = string.Format("该值不能小于{0}!", number);
rule.Value1 = number;
return rule;
} /// <summary>
/// 判断是否大于某个数
/// </summary>
/// <param name="number">数值</param>
public static ConditionValidationRule GreaterNumber(decimal number)
{
ConditionValidationRule rule = new ConditionValidationRule();
rule.ConditionOperator = ConditionOperator.Greater;
rule.ErrorText = string.Format("该值必须大于{0}!", number);
rule.Value1 = number;
return rule;
} /// <summary>
/// 判断是否在指定数(包含)之间
/// </summary>
/// <param name="small">小数</param>
/// <param name="big">大数</param>
/// <returns></returns>
public static ConditionValidationRule BetweenNumbers(decimal small, decimal big)
{
ConditionValidationRule rule = new ConditionValidationRule();
rule.ConditionOperator = ConditionOperator.Between;
rule.ErrorText = string.Format("该值不能小于{0}且不能大于{1}!", small, big);
rule.Value1 = small;
rule.Value2 = big;
return rule;
} /// <summary>
/// 判断结束时间是否不小于指定时间
/// </summary>
/// <param name="startTime">指定时间</param>
public static ConditionValidationRule NoLessDate(DateTime startTime)
{
ConditionValidationRule rule = new ConditionValidationRule();
rule.ErrorText = string.Format("结束时间不能小于开始时间!");
rule.ConditionOperator = ConditionOperator.GreaterOrEqual;
rule.Value1 = startTime;
return rule;
} /// <summary>
/// 调用正则表达式判断输入格式
/// </summary>
/// <param name="strRex">正则表达式</param>
/// <param name="isnotblank">是否允许为空</param>
public static CustomRuleByRegex AddValueRex(string strRex, bool isnotblank)
{
CustomRuleByRegex rule = new CustomRuleByRegex(strRex, isnotblank);
rule.ErrorText = "输入格式不正确,请重新输入!";
return rule;
}
}
控件规则类
private CustomValidation myvalidation = new CustomValidation(); /// <summary>
/// 获取条件列表
/// </summary>
/// <returns></returns>
private List<ControlRule> GetRuleList()
{
List<ControlRule> rulelist = new List<ControlRule>();
//起始时间
rulelist.Add(new ControlRule(datS_Time, ControlRule.NotEmpty()));
rulelist.Add(new ControlRule(datE_Time, ControlRule.NoLessDate(Convert.ToDateTime(datS_Time.EditValue))));
//高级
if (layoutControlItem2.Visibility == LayoutVisibility.Always)
{
if (cSCMoreThan.Checked)
{
rulelist.Add(new ControlRule(spin_TalkingLongGreater, ControlRule.NoLessNumber()));
}
}
return rulelist;
} //验证
private bool OperateValidate()
{
bool flag = true;
//输入参数基本验证
myvalidation.RuleList = GetRuleList();
if (!myvalidation.Validate())
{
flag = false;
}
return flag;
}
使用范例
[DevExpress]DxValidationProvider分享的更多相关文章
- DevExpress之GridControl控件小知识
DevExpress之GridControl控件小知识 一.当代码中的DataTable中有建数据关系时,DevExpress 的 GridControl 会自动增加一个子视图 .列名也就是子表的字段 ...
- DevExpress.XtraGrid winform试用分享
DevExpress.XtraGrid在winform里使用还挺麻烦,为了减少重复代码和代码复用,本人针对DevExpress.XtraGrid封装了一个Form的基类,其中涵盖了DevExpress ...
- 干货分享!DevExpress v17.1最新版帮助文档下载大全
DevExpress v17.1.5帮助文档下载列表大全来啦!包含.NET.VCL.HTML/JS系列所有帮助文档,提供CHM和PDF两个版本.除已停止更新的Silverlight.Windows 8 ...
- Devexpress GridView 数据格式化显示
gridView1.CustomColumnDisplayText += gridView1_CustomColumnDisplayText; void gridView1_CustomColumnD ...
- 【C#】分享带等待窗体的任务执行器一枚
-------------201504161039更新------------- 更新内容: IWaitForm接口删除System.Windows.Forms.DialogResult Dialog ...
- DevExpress的GridControl的实时加载数据解决方案(取代分页)
http://blog.csdn.net/educast/article/details/4769457 evExpress是一套第三方控件 其中有类似DataGridView的控件 今天把针对Dev ...
- 关于 DevExpress.XtraTreeList.TreeList 树形控件 的操作
作为一个C#程序员,在写程序时一直以来都使用的微软那一套控件,用起来特别爽,可是最近公司的一个项目用到了DevExpress框架,不用不知道,一用吓一跳,不得不承认这个框架确实很强大,效果也很炫,但是 ...
- DevExpress实现为TextEdit设置水印文字
本文实例展示了DevExpress实现为TextEdit设置水印文字的方法,是一个很实用的技巧.分享给大家供大家参考. 转自 http://blog.csdn.net/yh0503/article/d ...
- 完美演绎DevExpress XtraPrinting Library 的打印功能
完美演绎DevExpress XtraPrinting Library 的打印功能 2010-05-14 17:40:49| 分类: 默认分类|字号 订阅 设计报告不仅费时间,而且还乏味!但 ...
随机推荐
- TOR的使用
使用步骤: 1.配置,该计算机是否需要通过代理访问互联网?选否 2.该计算机的防火墙是否仅允许特定端口的互联网连接?选否 3.互联网服务提供商(ISP)是否对Tor网络连接进行了封锁或审查?选是 4. ...
- 掌握jQuery插件开发
进行jQuery插件开发前,首先要知道两个问题:什么是jQuery插件?jQuery插件如何使用? 第一个问题,jQuery插件就是用来扩展jQuery原型对象的一个方法,简单来说就是jQuery插件 ...
- C#- 操作Ini文件
以前习惯了使用.NET中的WEB.CONFIG或者APP.CONFIG,最近在做项目的时候遇到了些问题,发现没办法使用这些CONFIG文件.一开始我的做法是建一个文本文件,自己定规律,自己写方法去写新 ...
- javabean以及内省技术详解(转)
一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 ...
- 学习笔记:暴力破解WIFI小软件
小弟 自己的学习笔记,做练习的 ,缺陷还很多,做到无法解决速度问题就不想做下去了,如果要看的话 主要是思路问题,获取句柄,控制句柄而已,代码比较简单.大神勿喷啊 破解DEMO源码:http://dow ...
- Android开发环境搭建(windows OS)之补充
这几天搭建了个安卓开发环境,也想玩玩安卓开发.在查询CSDN,CNBLOG,视频网站之后终于把开发环境搭建起来了,发现所有的指导都比较离散,比如有些只说安装方法,有些只说下载方法.本文来个集大成,算是 ...
- [Whole Web, Node.js PM2] Loggin with PM2
Add config for app's log and error log for PM2. { "apps": [{ "name": "App1& ...
- Objective-C中的占位符,打印BOOL类型数据
常用的一些占位符: %@:字符串占位符 %d:整型 %ld:长整型 %f:浮点型 %c:char类型 %%:%的占位符 尽管有那么多的占位符,但是好像没有发现BOOL型的数据的占位符,这也是比较纠结的 ...
- Ubuntu jdk报Picked up JAVA_TOOL_OPTIONS信息解决
下面是摘自http://www.cnblogs.com/coderbean/p/4522182.html 以下是我在网上找了好久找到的: Ubuntu jdk报Picked up JAVA_TOOL_ ...
- java12 File类
)File类 )IO流的原理及概念 )IO流的分类 )IO流类的体系 )字节流和字符流 )处理流 )文件拷贝 )处理流 )文件拷贝 )文件分割与合并 File:文件和目录路径名的抽象表示形式,一个Fi ...