这回不分页了,改成添加修改数据了。您是如何添加数据的呢?使用ORM、LinQ、.net2.0新增加的FormView + SqlDataSource,还是其他?我还是喜欢自己动手丰衣足食。自己做一个表单控件来玩玩。
以前也写了几个关于表单控件的 post :
2、能自己“跑”的表单控件,思路,雏形,源码。vs2005版本
我简单的看了一下FormView + SqlDataSource的方式,ms还真是厉害,拖拽几个控件,点击下鼠标,基本功能就出来了。挺简单的吧,但是还是有几个缺点:
1、虽然能够根据字段来生成控件,但是好像只有文本框,下拉列表不能自动生成出来吧。
2、我的字段名是“Title”,那么他就把Title当成标签了,其实我是想用“新闻标题”来显示给用户看的。
3、aspx页面里一大堆的字段名和SQL语句,当然这些都是FormView 和 SqlDataSource的属性的内容。这么分散不便于管理吧,有个风吹草动的话怎么办呢?我还没有深入了解,不知道FormView 和 SqlDataSource有没有好的应对方法。
分析一下FormView 和 SqlDataSource都做了哪些事情,FormView主要是绘制各种控件,保存数据,提取数据这些工作好像都交给SqlDataSource了。(顺便问一下,谁使用了这种方式来写项目?我还是头一回尝试,不知道用得对不对。)
我的表单控件和这个差不多,主要是针对这几个缺点来完善的,请看下图。
先继承.net Framework里的 DataBoundControl 定义一个 myDataBoundControl,加上两个属性,以便于表单控件、查询控件和分页控件公用。
然后在继承myDataBoundControl 定义一个 BaseForm,作为 表单控件、查询控件 的基类,用于实现公用的代码。
BaseForm 的任务:
1、根据“配置信息”来绘制UI,比如文本框、下拉列表框、复选框组等控件,并且可以填充item,比如下拉列表框的选项,只绘制出来一个空的下拉列表框也没有什么大用处呀,所以要能够填充“选项”才好。
2、提取用户输入的数据,填充到一个集合里面,以备表单控件和查询控件使用。
myForm ,继承BaseForm,实现添加、修改、显示数据的功能。
myForm 的任务:
1、得到存储过程的名称,或者拼接参数化的SQL语句,再加上BaseForm 里添加的参数,一起提交给“数据访问函数库”,最终交给数据库执行添加(修改)的操作。
2、在修改和显示的装状态下要可以提取要修改的数据(提取部分交给数据访问函数库处理),自动“绑定”到各个控件。
查询控件就是把用户输入的数据,根据查询方式组合成SQL语句(where后面的),然后交给分页控件就可以了。
表单控件可以使用参数化sql,也可以使用存储过程。最大的优点就是可以不必在写拼接参数化的sql语句,也不用写给Parameter赋值的语句了。
另一个优点就是,当字段名有变化的时候,只需要修改“配置信息”,不用修改代码了。因为需要的SQL语句都是在运行的时候根据配置信息动态生成的,所以只需要改配置信息就可以了,省去了改代码的烦恼。
配置信息,上面提到了几回配置信息,还没有详细说明。这里的“配置信息”不是web.config文件,而是一种字段和UI(文本控件、下拉列表框等)的对应关系,就是说要描述一下一个字段在表单、查询、列表显示里面的形式,比如说Title(新闻标题),在表单里面会“变成”一个文本框,查询的时候还是一个文本框,但是要增加查询条件,要用模糊查询(like '%key%')的方式。还有一些细节,比如文本框的宽度,最大字符数,单行的还是多行的,是否需要验证、验证的方式等信息。对于下拉列表框就是如何填充选项,这些都要描述出来。
这些信息是放在数据库里的,不是放在一个表,而是多各表,目的就是可以复用字段名称,做到数据库里的字段名称有变化,配置信息里面只需要改一处就可以了。
表单控件的整体的思路和代码生成器有点相似,不同的是,代码生成器需要事先生成好代码,然后编译、运行;而表单控件的思路是,写好一个控件,编译,运行的时候根据描述信息来动态(自动)绘制UI,生成需要的参数化的SQL语句,自动填充存储过程的参数等。优点就是,易于应对变化。
基本功能都已经出来了,剩下的是整理一下思路,有些地方还要考虑安全因素,要在效率和安全之间找一个平衡点。最后还要写一个“管理程序”来管理这些“描述信息”。
现在代码还比较乱,可能会有比较大的改动,所以就先不提供下载了,整理一下,在提供下载。