我初步做了下,自我感觉也不是很差,当然这只是我的感觉而已。
主要功能:实现对Repeater,DataList,DataGrid,GridView的分页功能。
我认为的优点:
1:不要自己再构造复杂的分页存储过程;
2:把预加载页数(不是全部的页数,这个可以自己定义)的数据保存在ViewState里面,分页时,如果数据在预加载的页数范围内,那么就不要再从数据库里面读,而是直接从ViewState里面取,这样就能适当的减少数据库的负担;
3:自我感觉,至少要比系统GridView,DataGrid的分页效率要高。
自我认为适应的场合:数据量不是很大的网站,尤其是个人网站,我认为够用了。
实现的原理主要是:设定预加载数据的页数(这个是关键,如果带宽够可以设大一点,当然也不能太大了),每页的记录数...其他一些属性就省略了
举个例子吧:
如果设定预加载的页数为3,那么如果查询的数据超过3页的话,当你分页的时候,只要是在3页内的数据,都不会再去读数据库,而是从Viewstate里面读。
性能考虑:我把数据保存在Viewstate里面合理吗?这样的分页控件能投入使用吗?
希望大家能提些建议,如果这个可以的话,我将把改进后的控件发布出来。
还是先发出来,和大家一起探讨一下吧:
下面是对DataList的一个分页例子:
DataList的具体操作如下:
string constr="server=.;database=NorthWind;uid=test;pwd=123456";
protected void Page_Load(object sender, EventArgs e)
{
this.CustomPager1.refresh += new WebUserControl_CustomPager.MyDeletegate(FillData);//这句不能少,很重要,在数据需要重新绑定时发生
if (!IsPostBack)
{
FillData();
}
}
private void FillData()
{
DataSet ds = new DataSet();
ds = SqlHelper.ExecuteDataset(constr, "getAllOrders");
CustomPager1.ActivePageCount = 3;//很重要,设定预加载数据的页数,根据带宽和内存设置
CustomPager1.DataSourceType = "DataList";//指定数据控件的类型
CustomPager1.DataSourceName = "DataList1";//数据控件的名称
CustomPager1.DataSource = ds.Tables[0];
CustomPager1.PageItems = ds.Tables[0].Rows.Count;//得到所有记录的条数
CustomPager1.InitPagerData();//执行绑定过程
}
下面是这个用户控件的下载
/Files/xiaozhou/CustomPager.rar