using System; using System.Collections.Generic; using System.Windows.Forms; using DevExpress.XtraEditors.DXErrorProvider; using System.Text.RegularExpressions; namespace DeiNiu.wms.win { class ValidationRules { public static ConditionValidationRule notEmptyValidationRule { get{ ConditionValidationRule notEmptyValidationRule = new ConditionValidationRule(); notEmptyValidationRule.ConditionOperator = ConditionOperator.IsNotBlank;//验证条件 notEmptyValidationRule.ErrorText = "此栏不能为空!";//提示信息 notEmptyValidationRule.ErrorType = ErrorType.Critical;//错误提示类别 return notEmptyValidationRule; } } public static ConditionValidationRule getNumberRangeValidationRule(int start, int end) { ConditionValidationRule rangeValidationRule = new ConditionValidationRule(); rangeValidationRule.ConditionOperator = ConditionOperator.Between; rangeValidationRule.Value1 = start; rangeValidationRule.Value2 = end; rangeValidationRule.ErrorText = String.Format("{0} - {1} 之间任意一数字!",start,end); rangeValidationRule.ErrorType = ErrorType.Critical; return rangeValidationRule; } public static ConditionValidationRule getDecimalRangeValidationRule(decimal start, decimal end) { ConditionValidationRule rangeValidationRule = new ConditionValidationRule(); rangeValidationRule.ConditionOperator = ConditionOperator.Between; rangeValidationRule.Value1 = start; rangeValidationRule.Value2 = end; rangeValidationRule.ErrorText = String.Format("{0} - {1} 之间任意一数字!", start, end); rangeValidationRule.ErrorType = ErrorType.Critical; return rangeValidationRule; } } //控件规则类 public class ControlRule { public Control control; public ValidationRule rule; public ControlRule(Control control, ValidationRule rule) { this.control = control; this.rule = rule; } /// /// 判断控件是否为空 /// /// public static ConditionValidationRule NotEmpty() { ConditionValidationRule rule = new ConditionValidationRule(); rule.ConditionOperator = ConditionOperator.IsNotBlank; rule.ErrorText = "该值不允许为空!"; return rule; } /// /// 判断是否大于等于某个数 /// /// 数值 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; } /// /// 判断是否大于某个数 /// /// 数值 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; } /// /// 判断是否在指定数(包含)之间 /// /// 小数 /// 大数 /// 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; } /// /// 判断结束时间是否不小于指定时间 /// /// 指定时间 public static ConditionValidationRule NoLessDate(DateTime startTime) { ConditionValidationRule rule = new ConditionValidationRule(); rule.ErrorText = string.Format("结束时间不能小于开始时间!"); rule.ConditionOperator = ConditionOperator.GreaterOrEqual; rule.Value1 = startTime; return rule; } /// /// 调用正则表达式判断输入格式 /// /// 正则表达式 /// 是否允许为空 public static CustomRuleByRegex AddValueRex(string strRex, bool isnotblank) { CustomRuleByRegex rule = new CustomRuleByRegex(strRex, isnotblank); rule.ErrorText = "输入格式不正确,请重新输入!"; return rule; } } //自定义规则类 public class CustomRuleByRegex : ValidationRule { string regex; bool isnotblank;//是否为空 /// /// 是否为数字 /// public static string strIsNumeric = "^[\\+\\-]?[0-9]*\\.?[0-9]+$"; /// /// 电话号码 /// 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}$"; /// /// 使用正则表达式验证 /// /// 正则表达式 /// 是否允许为空 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 CustomValidation { private DXValidationProvider provider; /// /// 条件列表 /// public List RuleList { get; set; } public CustomValidation() { provider = new DXValidationProvider(); } /// /// 执行验证 /// /// 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; } } //自定义验证类 /* private CustomValidation myvalidation = new CustomValidation(); /// /// 获取条件列表 /// /// private List GetRuleList() { List rulelist = new List(); //起始时间 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(0))); } } return rulelist; } //验证 private bool OperateValidate() { bool flag = true; //输入参数基本验证 myvalidation.RuleList = GetRuleList(); if (!myvalidation.Validate()) { flag = false; } return flag; } */ //使用范例 }