在 DetailsView Web 服务器控件中分页

更新:2007 年 11 月

ASP.NET DetailsView 控件具有内置支持,使用户能够一次一条地对记录分页。此控件还支持自定义分页用户界面 (UI)。在 DetailsView 控件中,一个数据页就是一个绑定行。

如何在 DetailsView 控件中进行分页

DetailsView 控件支持对其数据源中的记录进行分页。若要启用分页行为,请将 AllowPaging 属性设置为 true。由 DetailsView 控件请求的页大小始终为一行。

如果 DetailsView 控件被绑定到某个数据源控件或任何实现 ICollection 接口的数据结构(包括数据集),则此控件将从数据源获取所有记录,显示当前页的记录,并丢弃其余的记录。当用户移到另一页时,DetailsView 控件会重复此过程,显示另一条记录。

ms227442.alert_note(zh-cn,VS.90).gif说明:

如果数据源未实现 ICollection 接口,DetailsView 控件将无法分页。例如,如果您正使用 SqlDataSource 控件,并将其 DataSourceMode 属性设置为 DataReader,则 DetailsView 控件无法实现分页。

有些数据源(如 ObjectDataSource 控件)提供更高级的分页功能。在这些情况下,DetailsView 控件在分页时利用数据源的更加高级的功能,从而获得更好的性能和更大的灵活性。根据数据源是否支持获取总行数,请求的行数可能有所不同。

ms227442.alert_note(zh-cn,VS.90).gif说明:

如果要创建数据源(例如,在 ObjectDataSource 控件的源对象中实现 SelectCountMethod 方法),强烈建议在提供多个数据页时数据源可返回总行数。这样可以最小化 DetailsView 控件为检索一个数据页而必须请求的记录数。如果数据源对象提供了总行数,则对于每一页,DetailsView 控件将一次只请求一行。如果未提供总行数,则 DetailsView 控件必须请求数据源中的所有行(从表示请求的数据页的行开始)并丢弃除要显示的行之外的所有行。

自定义分页设置和用户界面

可以用许多方式自定义 DetailsView 分页的用户界面 (UI)。

分页模式

在将 AllowPaging 属性设置为 true 时,可以使用 PagerSettings 属性自定义由 DetailsView 控件生成的分页用户界面 (UI) 的外观。DetailsView 控件可以显示允许向前和向后导航的方向控件,以及允许用户移动到特定页的数字控件。

DetailsView 控件的 PagerSettings 属性设置为一个 PagerSettings 类。可以通过将 DetailsView 控件的 Mode 属性设置为 PagerButtons 值来自定义分页模式。例如,您可以通过以下设置方式来自定义分页用户界面模式:

DetailsView1.PagerSettings.Mode = PagerButtons.NextPreviousFirstLast

可用的模式有:

页导航控件外观

DetailsView 控件有许多属性,可以用这些属性为不同的页导航模式自定义文本和图像。例如,如果您将某个 DetailsView 控件的分页模式设置为 NextPrevious 并想自定义显示的文本,可将 NextPageTextPreviousPageText 属性设置为您自己的值。默认情况下,PreviousPageTextNextPageText 属性分别设置为“<”和“>”。

还可以使用图像来自定义分页控件的外观。PagerSettings 类包含用于第一页、最后一页、上一页和下一页命令按钮的图像 URL 属性。

最后,可以通过将 DetailsView 控件的 PagerStyle 属性设置为 TableItemStyle 值来控制分页命令的外观。

数据分页模板

如果将 DetailsView 控件的 AllowPaging 属性设置为 true,则 DetailsView 控件可自动添加用于分页的用户界面 (UI) 控件。可以通过添加 PagerTemplate 模板来自定义用于分页的用户界面。若要指定执行哪个分页操作,请向此模板添加一个 Button 控件,然后将其 CommandName 属性设置为 Page,并将其 CommandArgument 属性设置为下列值之一:

  • First   定位到第一页。

  • Last   定位到最后一页。

  • Prev   定位到上一页。

  • Next   定位到下一页数据

  • 一个数字   指示特定的页。

下面的代码示例演示一个配置为提供分页的 DetailsView 控件。

<%@ Page language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>DetailsView Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <h3>DetailsView Example</h3>
        <table cellspacing="10"> 
          <tr>               
            <td valign="top">

              <asp:DetailsView ID="EmployeesDetailsView"
                DataSourceID="EmployeesSqlDataSource"
                AutoGenerateRows="false"
                AllowPaging="true"
                DataKeyNames="EmployeeID"     
                runat="server">

                <HeaderStyle forecolor="white" backcolor="Blue" />                

                <Fields>
                  <asp:BoundField Datafield="EmployeeID" HeaderText="Employee ID" ReadOnly="true"/>                    
                  <asp:BoundField Datafield="FirstName"  HeaderText="First Name"/>
                  <asp:BoundField Datafield="LastName"   HeaderText="Last Name"/>                    
                </Fields>

                <PagerSettings Mode="NextPreviousFirstLast"
                               FirstPageText="<<"
                               LastPageText=">>"
                               PageButtonCount="1"  
                               Position="Top"/> 
              </asp:DetailsView>

            </td>
          </tr>
        </table>

        <asp:SqlDataSource ID="EmployeesSqlDataSource" 
          SelectCommand="SELECT * FROM [Employees]" 
          connectionstring="<%$ ConnectionStrings:NorthwindConnection %>" 
          RunAt="server"/>

      </form>
  </body>
</html>
<%@ Page language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>DetailsView Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <h3>DetailsView Example</h3>
        <table cellspacing="10"> 
          <tr>               
            <td valign="top">

              <asp:DetailsView ID="EmployeesDetailsView"
                DataSourceID="EmployeesSqlDataSource"
                AutoGenerateRows="false"
                AllowPaging="true"
                DataKeyNames="EmployeeID"     
                runat="server">

                <HeaderStyle forecolor="white" backcolor="Blue" />                

                <Fields>
                  <asp:BoundField Datafield="EmployeeID" HeaderText="Employee ID" ReadOnly="true"/>                    
                  <asp:BoundField Datafield="FirstName"  HeaderText="First Name"/>
                  <asp:BoundField Datafield="LastName"   HeaderText="Last Name"/>                    
                </Fields>

                <PagerSettings Mode="NextPreviousFirstLast"
                               FirstPageText="<<"
                               LastPageText=">>"
                               PageButtonCount="1"  
                               Position="Top"/> 
              </asp:DetailsView>

            </td>
          </tr>
        </table>

        <asp:SqlDataSource ID="EmployeesSqlDataSource" 
          SelectCommand="SELECT * FROM [Employees]" 
          connectionstring="<%$ ConnectionStrings:NorthwindConnection %>" 
          RunAt="server"/>

      </form>
  </body>
</html>

请参见

参考

DetailsView Web 服务器控件概述