在 FormView Web 服务器控件中分页

更新:2007 年 11 月

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

如何在 FormView 控件中进行分页

FormView 控件支持对其数据源中的项进行分页。若要启用分页行为,可将 AllowPaging 属性设置为 true。FormView 控件的页大小始终为每页一行。

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

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

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

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

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

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

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

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

分页模式

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

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

FormView1.PagerSettings.Mode = PagerButtons.NextPreviousFirstLast

可用的模式有:

页导航控件外观

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

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

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

数据分页模板

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

  • First   定位到第一页。

  • Last   定位到最后一页。

  • Prev   定位到上一页。

  • Next   定位到下一页数据

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

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

<%@ 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>FormView Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <h3>FormView Example</h3>
        <table cellspacing="10"> 
          <tr>               
            <td valign="top">

              <asp:FormView ID="ProductsFormView"
                DataSourceID="ProductsSqlDataSource"
                AllowPaging="true"
                runat="server">

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

                <ItemTemplate>
                  <table>
                    <tr>
                      <td align="right"><b>Product ID:</b></td>
                      <td><asp:Label id="ProductIDLabel" runat="server" Text='<%# Eval("ProductID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Product Name:</b></td>
                      <td><asp:Label id="ProductNameLabel" runat="server" Text='<%# Eval("ProductName") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Category ID:</b></td>
                      <td><asp:Label id="CategoryIDLabel" runat="server" Text='<%# Eval("CategoryID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Quantity Per Unit:</b></td>
                      <td><asp:Label id="QuantityPerUnitLabel" runat="server" Text='<%# Eval("QuantityPerUnit") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Unit Price:</b></td>
                      <td><asp:Label id="UnitPriceLabel" runat="server" Text='<%# Eval("UnitPrice") %>' /></td>
                    </tr>
                  </table>                 
                </ItemTemplate>

                <PagerTemplate>
                  <table>
                    <tr>
                      <td><asp:LinkButton ID="FirstButton" CommandName="Page" CommandArgument="First" Text="<<" RunAt="server"/></td>
                      <td><asp:LinkButton ID="PrevButton"  CommandName="Page" CommandArgument="Prev"  Text="<"  RunAt="server"/></td>
                      <td><asp:LinkButton ID="NextButton"  CommandName="Page" CommandArgument="Next"  Text=">"  RunAt="server"/></td>
                      <td><asp:LinkButton ID="LastButton"  CommandName="Page" CommandArgument="Last"  Text=">>" RunAt="server"/></td>
                    </tr>
                  </table>
                </PagerTemplate>

              </asp:FormView>

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

        <asp:SqlDataSource ID="ProductsSqlDataSource" 
          SelectCommand="SELECT * FROM [Products]" 
          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>FormView Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <h3>FormView Example</h3>
        <table cellspacing="10"> 
          <tr>               
            <td valign="top">

              <asp:FormView ID="ProductsFormView"
                DataSourceID="ProductsSqlDataSource"
                AllowPaging="true"
                runat="server">

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

                <ItemTemplate>
                  <table>
                    <tr>
                      <td align="right"><b>Product ID:</b></td>
                      <td><asp:Label id="ProductIDLabel" runat="server" Text='<%# Eval("ProductID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Product Name:</b></td>
                      <td><asp:Label id="ProductNameLabel" runat="server" Text='<%# Eval("ProductName") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Category ID:</b></td>
                      <td><asp:Label id="CategoryIDLabel" runat="server" Text='<%# Eval("CategoryID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Quantity Per Unit:</b></td>
                      <td><asp:Label id="QuantityPerUnitLabel" runat="server" Text='<%# Eval("QuantityPerUnit") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Unit Price:</b></td>
                      <td><asp:Label id="UnitPriceLabel" runat="server" Text='<%# Eval("UnitPrice") %>' /></td>
                    </tr>
                  </table>                 
                </ItemTemplate>

                <PagerTemplate>
                  <table>
                    <tr>
                      <td><asp:LinkButton ID="FirstButton" CommandName="Page" CommandArgument="First" Text="<<" RunAt="server"/></td>
                      <td><asp:LinkButton ID="PrevButton"  CommandName="Page" CommandArgument="Prev"  Text="<"  RunAt="server"/></td>
                      <td><asp:LinkButton ID="NextButton"  CommandName="Page" CommandArgument="Next"  Text=">"  RunAt="server"/></td>
                      <td><asp:LinkButton ID="LastButton"  CommandName="Page" CommandArgument="Last"  Text=">>" RunAt="server"/></td>
                    </tr>
                  </table>
                </PagerTemplate>

              </asp:FormView>

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

        <asp:SqlDataSource ID="ProductsSqlDataSource" 
          SelectCommand="SELECT ProductID, ProductName, CategoryID, QuantityPerUnit, UnitPrice FROM [Products]" 
          connectionstring="<%$ ConnectionStrings:NorthwindConnection %>" 
          RunAt="server"/>

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

请参见

概念

FormView Web 服务器控件概述