您的位置:首页 > 其它

机房收费系统之组合查询的发展过程

2012-02-07 15:52 274 查看
下面说下我的组合查询吧。

在组合查询这,最早的想法是用structure,因为印象中有一种类型,是可以用int类型来访问的,可是做的时候发现不是structure,通过在网上查询,找到了应该是Enum类型。

在机房收费系统中,一共有四个组合查询的窗体。这四个窗体在外观上都一样,所以用窗体之间的继承是没的说的。

但是继承后,发现子窗体的按钮的单击事件不执行,执行的是父类的单击事件。而且如果子类方法后面加上handle btnQuery.Click后会提示错误。后来一想,发现自己好糊涂。然后将父类单击事件的函数改为了Overridable(虚方法),在子类重写后问题便解决了。

通过继承,我省去了复制粘贴那些对输入判断的代码,在参数填充上,也省了好多事。下面我就说下我是怎么实现不论怎样填写条件,只传送三个参数,而且没有select判断,由于我的Relation默认是and关系,所以只有Relation用了一个if语句来判断是不是或关系,在只有一个条件时,那么就将三个参数赋相同的值,也就是对三个相同的条件查询and关系。这样做的好处就是避免了使用判断语句来进行拼加字符串,在存储过程中直接传入参数即可。

其次,对于每个组合查询对应的表所用到的字段,我建了一个枚举类型,枚举类型包含的字段的顺序,和对应的组合框的SelectIndex处所对应的text对应。将字段名(枚举类型)、操作符,要查询的内容,组合关系分别作为成员创建一个类。这样就有四个类,在四个类中,都重写了New函数赋初值。例:







对于赋初值这件事,也是我为什么弃structure而用class。对于structure,我印象中是可以赋初值的,可是当我赋初值时,总是提示错误。通过查询,structure有一个没有参数的构造函数,但是不能够重写(这个是msdn上说的,但是我查的资料中,大多都是说的可以重写,应该是在.Net中改了吧。这个我也没有太深究下图中第一个是网上搜的资料,第二个是msdn中说的,二者截然相反。。。)







由于这四个组合查询对应的类只有字段名是不一样的,而且都用了Fill函数对每个成员赋值,所以我采用了模板方法模式(在前面文章有提到)

我的组合查询这块的发展历程差不多就是这样子,下篇我说下在这个过程中遇到的传参问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: