在 FormView Web 伺服器控制項置入分頁

更新:2007 年 11 月

ASP.NET FormView 控制項具有內建的支援,可讓使用者一次瀏覽一頁資料錄。控制項也支援自訂分頁使用者介面 (UI)。在 FormView 控制項中,一頁的資料是單一的繫結資料錄。

分頁在 FormView 控制項中的運作方式

FormView 控制項支援對其資料來源中的項目進行分頁。若要啟用分頁行為,您可以將 AllowPaging 屬性 (Property) 設為 true。FormView 控制項的頁面大小固定是每個頁面一個資料列。

如果 FormView 控制項繫結至資料來源控制項,或繫結至任何實作 ICollection 介面 (包括資料集) 的資料結構,則控制項會從資料來源取得所有資料錄、顯示目前頁面的資料錄,以及捨棄其他資料錄。當使用者移至其他頁面時,FormView 控制項會重複處理程序,以顯示不同的資料錄。

注意事項:

如果資料來源沒有實作 ICollection 介面,則 FormView 控制項無法分頁。例如,如果您使用 SqlDataSource 控制項並且設定其 DataSourceMode 屬性為 DataReader,則 FormView 控制項無法實作分頁。

有些資料來源 (例如 ObjectDataSource 控制項) 會提供更進階的分頁能力。在這些情況中,FormView 控制項會利用資料來源更進階的能力,在分頁時取得更佳的效能和彈性。要求的資料列數可能依據資料來源是否支援擷取總資料列計數而所有不同。

注意事項:

如果您要建立資料來源 (例如,在 ObjectDataSource 控制項的來源物件中實作 SelectCountMethod 方法),我們強烈建議您在提供資料頁面時,讓資料來源傳回總資料列計數。這會將 FormView 控制項為擷取資料頁面而必須要求的資料錄數目最小化。如果總資料列計數由資料來源物件提供,FormView 控制項則一次只會為每個頁面要求一個資料列。如果沒有提供總資料列計數,FormView 控制項就必須向資料來源要求所有資料列 (從表示所要求之資料頁面的資料列開始) 並捨棄所顯示之資料列以外的資料列。

自訂分頁設定和使用者介面

您可以用很多種方式自訂 FormView 分頁的使用者介面 (UI)。

分頁模式

PagerSettings 屬性可在將 AllowPaging 屬性設為 true 時,讓您自訂由 FormView 控制項產生的分頁使用者介面 (UI) 外觀。FormView 控制項可以顯示提供向前和向後巡覽的方向控制項,以及讓使用者移至特定頁面的數字控制項。

FormView 控制項的 PagerSettings 屬性設定為 PagerSettings 類別。透過將 FormView 控制項的 Mode 屬性設定為 PagerButtons 值,即可自訂分頁模式。例如,您可以用下列設定方式來自訂分頁 UI 模式:

FormView1.PagerSettings.Mode = PagerButtons.NextPreviousFirstLast

可用的模式包括:

頁面巡覽區控制項外觀

FormView 控制項有許多屬性,您可以用這些屬性來自訂不同頁面巡覽區模式的文字和影像。例如,如果您將 FormView 控制項的分頁模式設定為 NextPrevious 並要自訂顯示的文字,可以將 NextPageTextPreviousPageText 屬性設定為您自己的值。根據預設,PreviousPageTextNextPageText 屬性會分別設定為 "<" 和 ">"。

也可以使用影像來自訂分頁控制項的外觀。PagerSettings 類別包含第一頁、最後一頁、前一頁和下一頁命令按鈕的影像 URL 屬性。

最後,透過將 FormView 控制項的 PagerStyle 屬性設定為 TableItemStyle,即可控制分頁命令的外觀。

資料分頁範本

如果您設定 FormView 控制項的 AllowPaging 屬性為 true,則 FormView 控制項會自動加入分頁的使用者介面 (UI) 控制項。您可以加入 PagerTemplate 範本,即可自訂分頁的 UI。若要指定要執行的分頁作業,請將 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 >
    <title>FormView Example</title>
</head>
<body>
    <form id="form1" >
      <h3>FormView Example</h3>
        <table cellspacing="10"> 
          <tr>               
            <td valign="top">

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

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

                <ItemTemplate>
                  <table>
                    <tr>
                      <td align="right"><b>Product ID:</b></td>
                      <td><asp:Label id="ProductIDLabel"  Text='<%# Eval("ProductID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Product Name:</b></td>
                      <td><asp:Label id="ProductNameLabel"  Text='<%# Eval("ProductName") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Category ID:</b></td>
                      <td><asp:Label id="CategoryIDLabel"  Text='<%# Eval("CategoryID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Quantity Per Unit:</b></td>
                      <td><asp:Label id="QuantityPerUnitLabel"  Text='<%# Eval("QuantityPerUnit") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Unit Price:</b></td>
                      <td><asp:Label id="UnitPriceLabel"  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 >
    <title>FormView Example</title>
</head>
<body>
    <form id="form1" >
      <h3>FormView Example</h3>
        <table cellspacing="10"> 
          <tr>               
            <td valign="top">

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

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

                <ItemTemplate>
                  <table>
                    <tr>
                      <td align="right"><b>Product ID:</b></td>
                      <td><asp:Label id="ProductIDLabel"  Text='<%# Eval("ProductID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Product Name:</b></td>
                      <td><asp:Label id="ProductNameLabel"  Text='<%# Eval("ProductName") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Category ID:</b></td>
                      <td><asp:Label id="CategoryIDLabel"  Text='<%# Eval("CategoryID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Quantity Per Unit:</b></td>
                      <td><asp:Label id="QuantityPerUnitLabel"  Text='<%# Eval("QuantityPerUnit") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Unit Price:</b></td>
                      <td><asp:Label id="UnitPriceLabel"  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 伺服器控制項概觀