在 GridView Web 服务器控件中分页
更新:2007 年 11 月
ASP.NET GridView 控件有一个内置分页功能,可支持基本的分页功能。您可以使用默认分页用户界面 (UI) 或创建自定义的分页界面。
GridView 控件支持对其数据源中的项进行分页。将 AllowPaging 属性设置为 true 可以启用分页。GridView 控件通过以下任一方式支持分页:
-
如果将 GridView 控件绑定到请求时能够返回单个数据页的数据源控件,则 GridView 控件将直接利用这一功能。请求的行数可能会根据由 PageSize 属性指定的每页的行数以及数据源是否支持获取总行数而变化。
说明: 在 .NET Framework 包含的数据源控件中,只有 ObjectDataSource 控件支持返回单个数据页。
说明: 如果要创建数据源(例如,在 ObjectDataSource 控件的源对象中实现 SelectCountMethod 方法),强烈建议在提供多个数据页时数据源可返回总行数。这可以最大限度地减少为了检索数据页 GridView 控件必须请求的记录数。如果源数据对象提供了总行数,则 GridView 控件一次只请求一页行。如果没有提供总行数,则 GridView 控件必须向数据源请求所有行(从表示请求的数据页的行开始),并且丢弃所有行(除正在显示的行)。
-
如果将 GridView 控件绑定到不直接支持分页功能的数据源控件,或者如果通过 DataSource 属性利用代码将 GridView 控件绑定到一个数据结构,则 GridView 控件将按照如下方式进行分页:先从源获取所有数据记录,仅显示当前页的记录,然后丢弃剩余的记录。只有在 GridView 控件的数据源返回一个实现 ICollection 接口的集合(包括数据集)时,才支持这种分页方式。
说明: 如果数据源不直接支持分页且未能实现 ICollection 接口,则 GridView 控件将无法进行分页。例如,如果您正使用 SqlDataSource 控件,并将其 DataSourceMode 属性设置为 DataReader,则 GridView 控件无法实现分页。
您可以通过多种方式自定义 GridView 控件的分页用户界面。您可以通过使用 PageSize 属性来设置页的大小(即每次显示的项数)。还可以通过设置 PageIndex 属性来设置 GridView 控件的当前页。可以使用 PagerSettings 属性或通过提供页导航模板来指定更多的自定义行为。
分页模式
将 AllowPaging 属性设置为 true 时,PagerSettings 属性允许您自定义由 GridView 控件自动生成的分页用户界面 (UI) 的外观。GridView 控件可显示允许向前和向后导航的方向控件,以及允许用户移动到特定页的数字控件。
GridView 控件的 PagerSettings 属性被设置为 PagerSettings 类。可以通过设置 GridView 控件的 Mode 属性来自定义分页模式。例如,您可以通过以下设置方式来自定义分页用户界面模式:
GridView1.PagerSettings.Mode = PagerButtons.NextPreviousFirstLast
可用的模式有:
页导航控件外观
GridView 控件有许多属性,您可以用这些属性为不同的页导航模式自定义文本和图像。例如,如果您既想允许使用方向按钮进行导航,又想自定义显示的文本,则可以通过设置 NextPageText 和 PreviousPageText 属性来自定义按钮文本,如下面的示例所示:
GridView1.PagerSettings.NextPageText = "Click for next page" GridView1.PagerSettings.PreviousPageText = "Click for previous page"
还可以使用图像来自定义分页控件的外观。PagerSettings 类包含用于第一页、最后一页、上一页和下一页命令按钮的图像 URL 属性。
最后,可以通过将 GridView 控件的 PagerStyle 属性设置为一个 TableItemStyle 值来控制分页命令的外观。
数据分页模板
如果将 GridView 控件的 AllowPaging 属性设置为 true,则 GridView 控件可自动添加用于分页的用户界面 (UI) 控件。您可以通过添加 PagerTemplate 模板来自定义用于分页的用户界面。若要指定执行哪个分页操作,请包含一个 Button 控件,将其 CommandName 属性设置为 Page,并将其 CommandArgument 属性设置为以下任一值:
-
First 移动到第一页。
-
Last 移动到最后一页。
-
Prev 移动到上一页。
-
Next 移动到下一页。
-
一个数字 移动到某个特定页。
当 GridView 控件移动到新的数据页时,该控件会引发两个事件。PageIndexChanging 事件在 GridView 控件执行分页操作之前发生。PageIndexChanged 事件在新的数据页返回到 GridView 控件之后发生。
如果需要,可以使用 PageIndexChanging 事件取消分页操作,或在 GridView 控件请求新的数据页之前执行某项任务。可以使用 PageIndexChanged 事件在用户移动到另一个数据页之后执行某项任务。