在Asp.net中,提供了三個功能強大的列表控件:GridView、DataList和Repeater控件,但其中只有GridView控件提供分頁功能。雖然DataGrid提供了分頁功能,不過看上去功能有限,但是我們可以通過GridView的一些屬性來獲取狀態以及增加首頁、尾頁功能按鈕。如果在速度效率不是很講究的情況下,由DataGrid自己管理分頁還是不錯的,付出的代價就是要把整個相關數據取出來後再刪選指定頁的數據。好處就是開發速度快,不需要寫分頁的存儲過程。所以若需要追求執行效率,而且數據量比較大的情況下建議使用GridView的自定義分頁功能。若數據量不是很大,需要追求更多的頁面功能和樣式,那麼相對GridView來說,DataList和Repeater控件具有更高的樣式自定義性,所以很多時候我們喜歡使用DataList或Repeater控件來顯示數據。現在我采用手動分頁,對這三個控件作一比較。如下:
(1).使用GridView手動分頁。
通過下拉框來控制分頁。
前台代碼:
1<body> 2 <form id="form1" runat="server"> 3 <div> 4 <asp:GridView ID="gvShow" runat="server" OnPageIndexChanging="gvShow_PageIndexChanging" AllowPaging="True" PageSize="2"> 5 </asp:GridView> 6 <br /> 7 </div> 8 <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> 9 </asp:DropDownList> 10 </form> 11</body>
後台代碼:
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; public partial class _Default : System.Web.UI.Page { static SqlConnection con; static SqlDataAdapter sda; static SqlCommand cmd; static DataSet ds; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Bind(); //記住這句不能丟,否則行號會累加在下拉框中 DropDownList1.Items.Clear(); for (int i = 1; i< gvShow.PageCount; i++) { DropDownList1.Items.Add(i.ToString()); } } } private void Bind() { //gvShow.AllowPaging = true; //gvShow.PageSize = 2; gvShow.DataSource =BindData(); gvShow.DataBind(); } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { //關鍵代碼 gvShow.PageIndex = Convert.ToInt32(DropDownList1.SelectedValue)-1; Bind(); } protected void gvShow_PageIndexChanging(object sender, GridViewPageEventArgs e) { gvShow.PageIndex = e.NewPageIndex; Bind(); } private static void Init() { //數據庫連接語句 con = new SqlConnection("Data Source=.;database=數據庫名;uid=用戶ID;pwd=用戶密碼"); ds = new DataSet(); try { con.Open(); } catch { throw new Exception(); } } public static DataSet BindData() { Init(); string sql = "select * from book"; try { sda = new SqlDataAdapter(sql, con); sda.Fill(ds, "book"); return ds; } catch { throw new Exception(); } } }