ASP.NET分页方法的了解程度
ASP.NET分頁方法的了解程度
【出現(xiàn)頻率】
★★★★☆
【解答】
ASP.NET分頁的常用方法有以下幾種。
q 啟用部分數(shù)據(jù)控件的內(nèi)置分頁功能,如設置GridView控件的“AllowPaging”屬性為“true”,類似的數(shù)據(jù)控件還有DetailsView等。
q 通過SQL查詢語句,以提取指定部分的數(shù)據(jù)的方式完成分頁的功能。也包括調(diào)用數(shù)據(jù)庫中內(nèi)置的存儲過程完成分頁數(shù)據(jù)的提取。
q 調(diào)用所對應數(shù)據(jù)適配器對象(DataAdapter對象)的Fill方法時,傳遞分頁參數(shù)以完成數(shù)據(jù)集的分頁功能。
q 通過訪問DataTable對象的“Rows”屬性,以循環(huán)輸出的方式訪問結(jié)果集中指定區(qū)段的數(shù)據(jù)行,以達到分頁的效果。
【分析】
分頁功能在大部分WEB項目中使用比較廣泛,本題考查面試者對ASP.NET中可用分頁方法的了解程度。在頁面布局等方面要求不高的情況下,例如WEB后臺管理系統(tǒng),使用數(shù)據(jù)控件內(nèi)置的分頁功能通常是編程者的首選。為了展示常用的這四種分頁方法,筆者制作一個實例,在同一個頁面中分別用這四種方法對相同的結(jié)果集分頁顯示。在VS 2008中添加新的WEB窗體到NetWeb3項目,并命名為Pager.aspx。在頁面中添加1個GridView控件,用于展示內(nèi)置分頁功能,添加2個Repeater控件,用于展示SQL語句分頁和數(shù)據(jù)適配器對象分頁。最后通過在Pager.aspx頁面導入System.Data命名空間,在頁面中直接用for循環(huán)輸出dt數(shù)據(jù)表的指定數(shù)量記錄,以完成分頁顯示的效果。編寫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>控件內(nèi)置分頁【每頁3條記錄】</h3>
? <asp:GridView runat="server" ID="GView" AllowPaging="true" PageSize="3"></asp:GridView>
? <h3>數(shù)據(jù)適配器分頁【當前顯示第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>數(shù)據(jù)表分頁【當前顯示第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數(shù)據(jù)提供者
using System.Data.SqlClient;
?
namespace NetWeb3
{
? public partial class Pager : System.Web.UI.Page
? {
? //從Web.config的AppSettings節(jié)點的第1個子節(jié)點中獲取數(shù)據(jù)庫連接字符串
? //將連接字符串對象引用賦值給靜態(tài)字符串變量CnStr
? static string CnStr = ConfigurationManager.AppSettings[0];
? //根據(jù)CnStr變量創(chuàng)建SqlConnection對象,引用為cn
? SqlConnection cn = new SqlConnection(CnStr);
? //聲明SqlDataAdapter類型變量da
? SqlDataAdapter da;
? //創(chuàng)建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)
? { ?
? //調(diào)用自定義的MyBind方法
? MyBind();
? }
? }
?
? protected void MyBind()
? {
? string SqlStr = "SELECT [UserName],[Message] FROM [LeaveMsg]";
? //根據(jù)SqlStr和cn創(chuàng)建新的SqlDataAdapter對象,引用為da變量
? da = new SqlDataAdapter(SqlStr, cn);
? //調(diào)用da的Fill方法,將記錄填充到ds,其DataTable名稱為LeaveMsg1
? da.Fill(ds, "LeaveMsg1");
? //將LeaveMsg1數(shù)據(jù)表設置為GView控件的數(shù)據(jù)源
? this.GView.DataSource = ds.Tables["LeaveMsg1"];
?
? //調(diào)用da的Fill方法,將記錄填充到ds,其DataTable名稱為LeaveMsg2
? //Fill方法接收的第2個參數(shù)代表從第幾條記錄開始填充,第3個參數(shù)代表填充多少條記錄
? da.Fill(ds,0,2, "LeaveMsg2");
? //將LeaveMsg1數(shù)據(jù)表設置為Rp1控件的數(shù)據(jù)源
? this.Rp1.DataSource = ds.Tables["LeaveMsg2"].DefaultView; ?
?
? cn.Open();
? //編寫SQL語句,直接在數(shù)據(jù)庫查詢時分頁獲取數(shù)據(jù)
? SqlStr = "Select Top 3 [UserName],[Message] from [LeaveMsg] where [id] Not IN (Select Top (3*1) [id] from [LeaveMsg])";
? //根據(jù)SqlStr和cn創(chuàng)建新的SqlCommand對象,引用為cmd變量
? SqlCommand cmd = new SqlCommand(SqlStr, cn);
? //調(diào)用cmd的ExecuteReader方法,返回數(shù)據(jù)讀取器,引用為dr
? SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
? //將dr設置為Rp2控件的數(shù)據(jù)源
? this.Rp2.DataSource = dr;
? //將LeaveMsg1數(shù)據(jù)表對象引用賦值給dt,供*.aspx中訪問
? dt = ds.Tables["LeaveMsg1"];
? //綁定頁面所有控件的數(shù)據(jù)
? this.DataBind();
? //關(guān)閉數(shù)據(jù)讀取器,同時關(guān)閉數(shù)據(jù)庫連接
? dr.Close();
? }
?
? //該方法為GView控件的數(shù)據(jù)頁索引變化事件的處理方法
? protected void GView_PageIndexChanging(object sender, GridViewPageEventArgs e) ?
? {
? //設置新的頁索引
? GView.PageIndex = e.NewPageIndex;
? //再次調(diào)用MyBind方法,綁定頁面數(shù)據(jù)
? MyBind();
? }
? }
}
打開IE瀏覽器,在瀏覽器地址欄輸入“http://localhost/Pager.aspx”,頁面運行效果如圖12.5所示。
圖12.5 多種分頁方法的展示
總結(jié)
以上是生活随笔為你收集整理的ASP.NET分页方法的了解程度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET应用程序设计的10大技巧
- 下一篇: 作者:程学旗,男,中国科学院计算技术研究