DataGrid控件的分页

我们两清 提交于 2020-03-28 07:23:33

自动分页: dg1.AllowPaging = True;
自定义分页:dg1.AllowPaging = dg1.AllowCustomPaging = True;

1.自动分页
1)设置DataGrid控件的AllowPaging属性为True。
  可以直接在属性面板中设置,也可以在DataGrid控件的属性生成器中设置

2)为DataGrid控件编写PageIndexChanged事件处理方法,代码如下:
---------------------------------------------------------------------------
  DataGrid1.CurrentPageIndex = e.NewPageIndex;
  //更改显示页索引后,要重新绑定DataGrid控件
  datagridBind(); //这是一个用于绑定页面上DataGrid控件的方法
---------------------------------------------------------------------------

2.对自动分页的分析
首先,设置DataGrid控件dg1的AllowPaging属性为True
其次,设置dg1的PageSize属性(即单页上显示的项数)
三,为dg1的DataSource属性指定数据源(实现IEnumerable,如DataView、ArrayList、DataReader等)
四,执行方法 dg1.DataBind(),为控件绑定数据
五,客户端触发dg1的PageIndexChanged事件
六,在事件处理方法中重新设置dg1的CurrentPageIndex属性,并再次执行dg1.DataBind()

自动分页之所以"自动",在于asp.net会根据PageSize属性,自动对dg1的数据源的数据项进行分割(分页),然后由dg1.CurrentPageIndex属性来决定显示数据源中的哪部分数据项

3.自定义分页 与 自动分页 的不同
以数据库中某表的123行数据为例:
自动分页:将123条数据取出存放到数据源(DataTable)中,若PageSize为10,则asp.net会自动知道分为11页,在每一次绑定数据源时,会根据CurrentPageIndex属性来显示特定页的数据行。比如CurrentPageIndex为2的话,在控件中会显示数据源中的第20-29行。

自定义分页:这时候asp.net不会自动计算出要将数据项分成多少页,也不会将数据源中的数据项进行分割,每次绑定的时候,datagrid总是显示数据源中的前10项(PageSize=10)。

所以,在自定义分页中,不能象自动分页那样总是保持数据源DataSource属性值不变。在自定义分页中,显示不同页码的页时,必须确保datagrid的DataSource属性值不同,数据源中只有当前页要显示的数据项。如果每次绑定时数据源中的数据项都是一样的,则每一页显示的内容也会是一样的。因为,数据源中的数据项不会自动分割了,这是两者最大的区别。

4.导航按钮
无论是自动分页或自定义分页,都可以设置 "显示导航按钮" 或者不。(在属性生成器中设置)

如果"显示导航按钮",必须要知道总共要分为多少页(对于自动分页,asp.net能自动计算出)、当前页的页码。还需要为PageIndexChanged事件的编写处理方法。

如果不"显示导航按钮",则需要放置"上一页"、"下一页"、"首页"、"末页"等Button或LinkButton控件
并为这些控件编写事件,来代替PageIndexChanged事件的编写。不

自动分页且不"显示导航按钮"的情况,很可能被误认为是自定义分页,一定要注意。

5.自定义分页("显示导航按钮")
1) dg1.AllowPaging = dg1.AllowCustomPaging = True

2)指定dg1.PageSize和dg1.VirtualItemCount属性
因为,自定义分页时,不会自动计算出总页数,需要指定控件dg1的VirtualItemCount属性,用这个属性和PageSize属性来计算总页数。

3)为dg1编写PageIndexChanged事件处理方法。事件方法代码中,要有2个功能
一,重新设置dg1.CurrentPageIndex。通常为
  dg1.CurrentPageIndex = e.NewPageIndex;
二,为dg1绑定数据。
  要确保CurrentPageIndex的值不同,dg1的数据源中的数据项也不同。也就是说,要保证dg1的数据源中只能有当前页要显示的那些数据项。

4) 这样的确有些麻烦,使用PagedDataSource类对象则可以避免为不同页生成不同的数据源。
PageIndexChanged事件处理方法代码:
--------------------------------------------------------------------------
   PagedDataSource pds = new PagedDataSource();
   DataSet dSet = m_audit.GetDSet();  //调用某方法,返回一个DataSet对象
   DataView dView = dSet.Tables[0].DefaultView;
  
   pds.DataSource = dView;
   pds.AllowPaging = true; //自动分页
   pds.PageSize = dg1.PageSize;
   pds.CurrentPageIndex = dg1.CurrentPageIndex;  //这就是关键所在
 
   dg1.DataSource=pds; //绑定数据。以pds对象为隔离对象,避免了
   dg1.DataBind(); //为显示不同页面,而构造不同的数据源
---------------------------------------------------------------------------

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!