您好,登錄后才能下訂單哦!
ASP.NET分頁(yè)的是我們?cè)诰幊踢^(guò)程中遇到的常見(jiàn)問(wèn)題,下面就這個(gè)問(wèn)題說(shuō)下添美的看法。
q 啟用部分?jǐn)?shù)據(jù)控件的內(nèi)置分頁(yè)功能,如設(shè)置GridView控件的"AllowPaging"屬性為"true",類似的數(shù)據(jù)控件還有DetailsView等。
q 通過(guò)SQL查詢語(yǔ)句,以提取指定部分的數(shù)據(jù)的方式完成分頁(yè)的功能。也包括調(diào)用數(shù)據(jù)庫(kù)中內(nèi)置的存儲(chǔ)過(guò)程完成分頁(yè)數(shù)據(jù)的提取。
q 調(diào)用所對(duì)應(yīng)數(shù)據(jù)適配器對(duì)象(DataAdapter對(duì)象)的Fill方法時(shí),傳遞分頁(yè)參數(shù)以完成數(shù)據(jù)集的分頁(yè)功能。
q 通過(guò)訪問(wèn)DataTable對(duì)象的"Rows"屬性,以循環(huán)輸出的方式訪問(wèn)結(jié)果集中指定區(qū)段的數(shù)據(jù)行,以達(dá)到分頁(yè)的效果。
【分析】
分頁(yè)功能在大部分WEB項(xiàng)目中使用比較廣泛,本題考查面試者對(duì)ASP.NET中可用分頁(yè)方法的了解程度。在頁(yè)面布局等方面要求不高的情況下,例如WEB后臺(tái)管理系統(tǒng),使用數(shù)據(jù)控件內(nèi)置的分頁(yè)功能通常是編程者的首選。為了展示常用的這四種分頁(yè)方法,制作一個(gè)實(shí)例,在同一個(gè)頁(yè)面中分別用這四種方法對(duì)相同的結(jié)果集分頁(yè)顯示。
在VS 2008中添加新的WEB窗體到NetWeb3項(xiàng)目,并命名為Pager.aspx.在頁(yè)面中添加1個(gè)GridView控件,用于展示內(nèi)置分頁(yè)功能,添加2個(gè)Repeater控件,用于展示SQL語(yǔ)句分頁(yè)和數(shù)據(jù)適配器對(duì)象分頁(yè)。
最后通過(guò)在Pager.aspx頁(yè)面導(dǎo)入System.Data命名空間,在頁(yè)面中直接用for循環(huán)輸出dt數(shù)據(jù)表的指定數(shù)量記錄,以完成分頁(yè)顯示的效果。編寫Pager.aspx如代碼12.12所示。
代碼12.12 多種方法分頁(yè)顯示頁(yè)面:Pager.aspx
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>www.sytm.net網(wǎng)站四種分頁(yè)方法實(shí)例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h4>控件內(nèi)置分頁(yè)【每頁(yè)3條記錄】</h4>
<asp:GridView runat="server" ID="GView" AllowPaging="true" PageSize="3"></asp:GridView>
<h4>數(shù)據(jù)適配器分頁(yè)【當(dāng)前顯示第1頁(yè),每頁(yè)2條記錄】</h4>
<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>
<h4>SQL分頁(yè)【當(dāng)前顯示第2頁(yè),每頁(yè)3條記錄】</h4>
<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>
<h4>數(shù)據(jù)表分頁(yè)【當(dāng)前顯示第1頁(yè),每頁(yè)3條記錄】</h4>
<%
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 多種方法分頁(yè)邏輯代碼:Pager.aspx.csusing System;……
//導(dǎo)入必要的命名空間,使用SQL SERVER數(shù)據(jù)提供者using System.Data.SqlClient;namespace NetWeb3
{public partial class Pager : System.Web.UI.Page{//從Web.config的AppSettings節(jié)點(diǎn)的第1個(gè)子節(jié)點(diǎn)中獲取數(shù)據(jù)庫(kù)連接字符串//將連接字符串對(duì)象引用賦值給靜態(tài)字符串變量CnStrstatic string CnStr = ConfigurationManager.AppSettings[0];//根據(jù)CnStr變量創(chuàng)建SqlConnection對(duì)象,引用為cnSqlConnection cn = new SqlConnection(CnStr);//聲明SqlDataAdapter類型變量daSqlDataAdapter da;
//創(chuàng)建DataSet對(duì)象,引用為ds
DataSet ds = new DataSet();
//聲明DataTable類型的變量dt
//protected修飾符可以保證在*.aspx中可以訪問(wèn)dtprotected DataTable dt;protected void Page_Load(object sender, EventArgs e){this.GView.PageIndexChanging += new GridViewPageEventHandler(GView_PageIndexChanging);//判斷頁(yè)面是否為首次加載if (!IsPostBack)
{//調(diào)用自定義的MyBind方法
MyBind();
}
}
protected void MyBind()
{string SqlStr = "SELECT [UserName],[Message] FROM [LeaveMsg]";//根據(jù)SqlStr和cn創(chuàng)建新的SqlDataAdapter對(duì)象,引用為da變量da = new SqlDataAdapter(SqlStr, cn);//調(diào)用da的Fill方法,將記錄填充到ds,其DataTable名稱為L(zhǎng)eaveMsg1da.Fill(ds, "LeaveMsg1");//將LeaveMsg1數(shù)據(jù)表設(shè)置為GView控件的數(shù)據(jù)源
this.GView.DataSource = ds.Tables["LeaveMsg1"];//調(diào)用da的Fill方法,將記錄填充到ds,其DataTable名稱為L(zhǎng)eaveMsg2//Fill方法接收的第2個(gè)參數(shù)代表從第幾條記錄開(kāi)始填充,第3個(gè)參數(shù)代表填充多少條記錄da.Fill(ds,0,2, "LeaveMsg2");//將LeaveMsg1數(shù)據(jù)表設(shè)置為Rp1控件的數(shù)據(jù)源
this.Rp1.DataSource = ds.Tables["LeaveMsg2"].DefaultView;cn.Open();//編寫SQL語(yǔ)句,直接在數(shù)據(jù)庫(kù)查詢時(shí)分頁(yè)獲取數(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對(duì)象,引用為cmd變量SqlCommand cmd = new SqlCommand(SqlStr, cn);//調(diào)用cmd的ExecuteReader方法,返回?cái)?shù)據(jù)讀取器,引用為drSqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);//將dr設(shè)置為Rp2控件的數(shù)據(jù)源this.Rp2.DataSource = dr;
//將LeaveMsg1數(shù)據(jù)表對(duì)象引用賦值給dt,供*.aspx中訪問(wèn)dt = ds.Tables["LeaveMsg1"];//綁定頁(yè)面所有控件的數(shù)據(jù)
this.DataBind();
//關(guān)閉數(shù)據(jù)讀取器,同時(shí)關(guān)閉數(shù)據(jù)庫(kù)連接
dr.Close();
}
//該方法為GView控件的數(shù)據(jù)頁(yè)索引變化事件的處理方法protected void GView_PageIndexChanging(object sender, GridViewPageEventArgs e){//設(shè)置新的頁(yè)索引GView.PageIndex = e.NewPageIndex;
//再次調(diào)用MyBind方法,綁定頁(yè)面數(shù)據(jù)
MyBind();
}
}
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。