现在的位置: 首页 > 综合 > 正文

Winform窗体数据校验的集成实现

2012年12月25日 ⁄ 综合 ⁄ 共 2585字 ⁄ 字号 评论关闭
一提到数据校验,大家都会觉得非常熟悉,因为做UI部分的人居多,而只要有UI,就有数据校验。很多时候,一个每个页面的数据校验都要重新写过,因为判断的逻辑不同,而且集成起来似乎不是很有必要,但也有点麻烦。
由于开始使用.net以来,大部分工作是做winform部分,所以对校验的问题,自然是经常碰到,每个页面都要写校验,碰到的多了,就想这个问题有没有好点的解决办法呢?想了好久,整理了一下,愿和大家分享。

数据校验,我把它分为三个层次。

第一个层次是,数据校验。也就是对一个数值进行校验,比如判断一个字符串是否为空,是否超长,是否为整数,是否是一个email地址。这个校验层次,是最低的校验层次,是接触到校验问题时都能够想到的。将主要的数据校验方法罗列如下:
IsNull(string str);
IsNum(string str);
IsInteger(string str);
IsBigInteger(string str);
IsSmallInteger(string str);
IsTinyInteger(string str);
IsDecimal(string str);
OutOfLength(string str, int len);
IsPassword(string str);
IsPhoneNo(string str);
IsEmail(string str);
IsDate(string str);
IsDateTime(string str);
IsLetterNum(string str);
IsDoubleCharacter(string str);
IsIPAddress(string str);
IsNotNegInt(string str);
IsFloat(string str);
IsEnglishLetter(string str);
IsNumber(char ichar);
IsDecimal(char ichar);
IsPhone(char ichar);

第二个层次是,控件校验。也就是对一些控件进行校验,比如一个TextBox,判断它是否为空,输入内容是否超长,等等。第二层校验,是在第一层校验的基础上实现的。任何控件(主要是常用的一些简单的控件,做校验的也是这些控件居多)都有值,不论是输入还是选择的,那么对这些值都要做校验,上升到对控件层次的校验,是对校验的抽象处理的一个必然结果。接触的多了,自然会由第一层升为第二层。下面我再介绍一下最为重要的第三层。
对控件的校验,我只罗列一下对TextBox的校验:
VerifyTextBox(TextBox tb, bool notnull);
VerifyTextBox(TextBox tb, int length);
VerifyTextBox(TextBox tb, bool notnull, int length);
VerifyTextBox(TextBox tb, bool notnull, DataType dt);
VerifyTextBox(TextBox tb, bool notnull, StringType st);
VerifyTextBox(TextBox tb, bool notnull, DataType dt, StringType st);
VerifyTextBox(TextBox tb, bool notnull, int length, StringType st);
VerifyTextBox(TextBox tb, bool notnull, int length, DataType dt, StringType st);
对于StringType和DataType的校验类型分类,由于上面用到,罗列如下:
    public enum DataType
    {
        Null,
        TinyInt,
        SmallInt,
        Int,
        BigInt,
        Decimal,
        Float,
        NegativeInt,
        NotNegativeInt
    }
    public enum StringType
    {
        Null,
        Date,
        DateTime,
        Phone,
        Email,
        IPAddress,
        Password,
        EnglishLetterString,
        LetterNum,
        NumberString
    }

第三个层次是,集成校验。集成校验,就是对控件校验的集成。窗体校验,就是对一组控件的校验,将一组控件的校验集成起来,则就实现了对窗体的集成校验。
集成校验涉及到两个问题,校验对象和校验类型。校验对象就是校验控件,这个简单,那么校验类型该如何定呢?有哪些校验类型呢,如何将他们分类?通过总结,我把校验类型分为如下四类:非空校验,超长校验,字符串型校验,数值型校验。有了这四类校验,那么对某个控件,我可以对它进行非空校验,或者超长校验,等等,那么,在集成校验问题上,最大的瓶颈就解决了。还有一个,对控件的各种校验用一个对象VerificationObject来实现。
VerificationObject的属性有:
VControl
VNotNull
VLength
VDataType
VStringType
VNotNullMessage
VLengthMessage
VDataTypeMessage
VStringTypeMessage
该对象提供一个VerificationObject(Control ctrl,bool notnull,int length,DataType dt,StringType st,string nnm,string lm,string dtm,string stm)方法来实现对一个控件的四种类型的校验集成。
然后再提供一个VerificationUtility类来实现对VerificationObject的包装和实现。
整个集成校验的思路,至此粗略的说完了,也许不是很清楚,下面我会提供该类的源代码的下载。对于这种分法是否合理,只是我的个人总结,但是在一般的应用上是完全可以满足了,至于是否有其他更为合理的分法,希望能和大家共同交流,互相学习。
下载:Verification.cs

抱歉!评论已关闭.