在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();
}
}
}