编程“方便面”之用户控件2011-08-06 博客园 邢少学习使用.net已经有数个年头,从使用.net进行cs开发,到现在做Web开发,一直都是想当然的写着、 敲着。知道有一天,一个java开发者问我一个问题,我虽然将java语言已经还给母校了,但是还是可以读 懂的。在我尝试解决它的问题的时候,发现那哥们无法理解我的想法,他是用eclipse开发java的,java 组的一位资深的技术员过来后,对我的解决方法也是不感冒,问我为什么要那么写呢?为什么要那么爱用 控件呢?而且不是很认同控件这种将特别功能需求进行封装的编程方式。但是作为一个已经.net语言思路 的开发者,我还是很喜欢这些可爱的“控件”家伙的。鄙人感觉它们是体现高级编程语言特点的产物,是 高效编程的必要组成。在项目中适度的”食用”,还是可以节省大量的代码开发量,并且可以实现页面功 能之间的松耦合,使得代码更有条理。这一阵做了几个项目,在项目中对一些问题用“用户控件”做了适 度的功能封装,感觉用起来很是方便,但是也感觉用些不足,贴出来互相学习,也希望和园子的朋友对用 户控件的使用方式进行交流。分页问题应该是web开发中的一个常见问题。Gridview控件虽然提供了分页的功能,但是严格的讲,它 并不是真正的分页,只是“显示分页”罢了。我做的几个项目都是信息管理系统,数据量比较大,如果用 gridview进行分页,在大访问量下实在是“惨”了点,所以就想用存储过程实现分页,每次只是取到本页 的20条或者有限的数据。网络的上的存储过程很多,但是实际操作起来也很麻烦,所以就想把分页的功能 封装起来,实现一个分页控制器的功能。先说一下思路吧,我的想法是创建一个分页控制类来控制存储过程的读取,在控件的使用页面传递类 似页码、表名称、等适当数量的条件参数,触发更新方法调用存储过程来刷新数据。编写设及的问题有3 个:1、分页控制类的封装,封装那些东西;2、用户控件与宿主页面的数据交互;3、分页存储过程;首先是创建一个用户控件、控件起码要有样子,(”记录总共xx条 当前第x页 首页 上一页 下一页 末页 转到〔〕”之类的),简单搞定。至于后台的代码就是逻辑过程了。上一页的操作、下一页等的操 作。根据传递的条件,相应的与分页控制类进行交互。

在页面中,我还放了两个隐藏字段来存储页面必要的两个字段,用来记录分页状态
<asp:HiddenField ID="hdfcurr" runat="server" Value="0" />
       <asp:HiddenField ID="hdfcount" runat="server" Value="0" />从用户控件与宿主页面的数据交互方面先说,delegate〔委托〕可以轻松实现,定义一个回调就可以 实现。
public delegate void DelegateDataBind(DataTable dt);
     private DelegateDataBind _dataBindEvent;
     public DelegateDataBind dataBindEvent
     {
         get { return _dataBindEvent; }
         set { _dataBindEvent = value; }
     }