天天看點

ASP.NET分頁方法的了解程度

ASP.NET分頁方法的了解程度

【出現頻率】

★★★★☆

【解答】

ASP.NET分頁的常用方法有以下幾種。

q 啟用部分資料控件的内置分頁功能,如設定GridView控件的“AllowPaging”屬性為“true”,類似的資料控件還有DetailsView等。

q 通過SQL查詢語句,以提取指定部分的資料的方式完成分頁的功能。也包括調用資料庫中内置的存儲過程完成分頁資料的提取。

q 調用所對應資料擴充卡對象(DataAdapter對象)的Fill方法時,傳遞分頁參數以完成資料集的分頁功能。

q 通過通路DataTable對象的“Rows”屬性,以循環輸出的方式通路結果集中指定區段的資料行,以達到分頁的效果。

【分析】

分頁功能在大部分WEB項目中使用比較廣泛,本題考查面試者對ASP.NET中可用分頁方法的了解程度。在頁面布局等方面要求不高的情況下,例如WEB背景管理系統,使用資料控件内置的分頁功能通常是程式設計者的首選。為了展示常用的這四種分頁方法,筆者制作一個執行個體,在同一個頁面中分别用這四種方法對相同的結果集分頁顯示。在VS 2008中添加新的WEB窗體到NetWeb3項目,并命名為Pager.aspx。在頁面中添加1個GridView控件,用于展示内置分頁功能,添加2個Repeater控件,用于展示SQL語句分頁和資料擴充卡對象分頁。最後通過在Pager.aspx頁面導入System.Data命名空間,在頁面中直接用for循環輸出dt資料表的指定數量記錄,以完成分頁顯示的效果。編寫Pager.aspx如代碼12.12所示。

代碼12.12 多種方法分頁顯示頁面:Pager.aspx

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

  <title>四種分頁方法執行個體</title>

</head>

<body>

  <form id="form1" runat="server">

  <div>

  <h3>控件内置分頁【每頁3條記錄】</h3>

  <asp:GridView runat="server" ID="GView" AllowPaging="true" PageSize="3"></asp:GridView>

  <h3>資料擴充卡分頁【目前顯示第1頁,每頁2條記錄】</h3>

  <asp:Repeater runat="server" ID="Rp1" >

  <HeaderTemplate><ul></HeaderTemplate>

  <ItemTemplate>

  <li><asp:Label runat="server" ID="UName" Text='<%# Eval("UserName") %>'></asp:Label>:<asp:Label runat="server" ID="Msg" Text='<%# Eval("Message") %>'></asp:Label></li>

  </ItemTemplate>

  <FooterTemplate></ul></FooterTemplate>

  </asp:Repeater>

  <h3>SQL分頁【目前顯示第2頁,每頁3條記錄】</h3>

  <asp:Repeater runat="server" ID="Rp2" >

  <HeaderTemplate><ul></HeaderTemplate>

  <ItemTemplate>

  <li><asp:Label runat="server" ID="UName" Text='<%# Eval("UserName") %>'></asp:Label>:<asp:Label runat="server" ID="Msg" Text='<%# Eval("Message") %>'></asp:Label></li>

  </ItemTemplate>

  <FooterTemplate></ul></FooterTemplate>

  </asp:Repeater>

  <h3>資料表分頁【目前顯示第1頁,每頁3條記錄】</h3>

  <%

  Response.Write("<ul>");

  int i;

  string UName;

  string Msg;

  for(i=0;i<3;i++)

  {

  UName = dt.Rows[i][0].ToString();

  Msg = dt.Rows[i][1].ToString();

  Response.Write(String.Format("<li>{0}:{1}</li>",UName,Msg));

  }

  Response.Write("</ul>");  

  %>

  </div>

  </form>

</body>

</html>

編寫Pager.aspx.cs如代碼12.13所示。

代碼12.13 多種方法分頁邏輯代碼:Pager.aspx.cs

using System;

………………………………

//導入必要的命名空間,使用SQL SERVER資料提供者

using System.Data.SqlClient;

namespace NetWeb3

{

  public partial class Pager : System.Web.UI.Page

  {

  //從Web.config的AppSettings節點的第1個子節點中擷取資料庫連接配接字元串

  //将連接配接字元串對象引用指派給靜态字元串變量CnStr

  static string CnStr = ConfigurationManager.AppSettings[0];

  //根據CnStr變量建立SqlConnection對象,引用為cn

  SqlConnection cn = new SqlConnection(CnStr);

  //聲明SqlDataAdapter類型變量da

  SqlDataAdapter da;

  //建立DataSet對象,引用為ds

  DataSet ds = new DataSet();

  //聲明DataTable類型的變量dt

  //protected修飾符可以保證在*.aspx中可以通路dt

  protected DataTable dt;

  protected void Page_Load(object sender, EventArgs e)

  {

  this.GView.PageIndexChanging += new GridViewPageEventHandler(GView_PageIndexChanging);

  //判斷頁面是否為首次加載

  if (!IsPostBack)

  {  

  //調用自定義的MyBind方法

  MyBind();

  }

  }

  protected void MyBind()

  {

  string SqlStr = "SELECT [UserName],[Message] FROM [LeaveMsg]";

  //根據SqlStr和cn建立新的SqlDataAdapter對象,引用為da變量

  da = new SqlDataAdapter(SqlStr, cn);

  //調用da的Fill方法,将記錄填充到ds,其DataTable名稱為LeaveMsg1

  da.Fill(ds, "LeaveMsg1");

  //将LeaveMsg1資料表設定為GView控件的資料源

  this.GView.DataSource = ds.Tables["LeaveMsg1"];

  //調用da的Fill方法,将記錄填充到ds,其DataTable名稱為LeaveMsg2

  //Fill方法接收的第2個參數代表從第幾條記錄開始填充,第3個參數代表填充多少條記錄

  da.Fill(ds,0,2, "LeaveMsg2");

  //将LeaveMsg1資料表設定為Rp1控件的資料源

  this.Rp1.DataSource = ds.Tables["LeaveMsg2"].DefaultView;  

  cn.Open();

  //編寫SQL語句,直接在資料庫查詢時分頁擷取資料

  SqlStr = "Select Top 3 [UserName],[Message] from [LeaveMsg] where [id] Not IN (Select Top (3*1) [id] from [LeaveMsg])";

  //根據SqlStr和cn建立新的SqlCommand對象,引用為cmd變量

  SqlCommand cmd = new SqlCommand(SqlStr, cn);

  //調用cmd的ExecuteReader方法,傳回資料讀取器,引用為dr

  SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

  //将dr設定為Rp2控件的資料源

  this.Rp2.DataSource = dr;

  //将LeaveMsg1資料表對象引用指派給dt,供*.aspx中通路

  dt = ds.Tables["LeaveMsg1"];

  //綁定頁面所有控件的資料

  this.DataBind();

  //關閉資料讀取器,同時關閉資料庫連接配接

  dr.Close();

  }

  //該方法為GView控件的資料頁索引變化事件的處理方法

  protected void GView_PageIndexChanging(object sender, GridViewPageEventArgs e)  

  {

  //設定新的頁索引

  GView.PageIndex = e.NewPageIndex;

  //再次調用MyBind方法,綁定頁面資料

  MyBind();

  }

  }

}

打開IE浏覽器,在浏覽器位址欄輸入“http://localhost/Pager.aspx”,頁面運作效果如圖12.5所示。

圖12.5 多種分頁方法的展示