在做一些网站时偷懒使用动软来生成工厂模式的三层结构时,能为工作减轻不少重复的负担,包括其中生成的WebSite中一些Show、Modify、Add页面,能很快实现对应Model的简单添加查看编辑功能,但是没有相关的查询功能。便写了个相关用于查询的自定义属性及用户控件来生成对应Model的查询页面,可查询的字段可以通过自定义属性来进行定义,然后通过反射来生成每个字段的用户控件供用户选择查询。
首先创建测试实体类及相关的自定义属性,代码如下:
创建完毕后再创建字段通用的用户控件,该控件包含3个子控件,2个CheckBox,1个TextBox,当字段属于Bool类型时显示两个CheckBox,如果字段是其它类型则显示一个CheckBox,一个TextBox供用户输入。另讲各个子空间的Text和可见性公开属性,让动态生成该控件时可以很好控制其对应的属性。代码如下:
写好完毕,我们就可在页面中开始利用反射动态生成上面创建的用户控件。读取Model中的每个属性值,判断是否可以进行查询的自定义属性,如果是可查询的则将动态生成对应的用户控件,并读取自定义属性的一些信息,如中文名称赋值显示。代码如下:
在查询时,我们可遍历所有字段,看是否网页中存在对应字段的用户控件,存在则开始判断是否选中及其假如选中其该字段对应用户输入的值或是否有选择(bool类型的字段),然后通过bll.GetAllList(whereClause)来实现查询。如果可以的话应该可以通过CodeSmith等软件来完成该过程的自动自动生成,可惜不是很熟悉。要实现其它Model查询时,只要在对应字段设置自定义属性及将动态生成时的类换成对应的Model类即可。