今天閑來無事就學習學習了aspNetPager分頁控件的用法:
AspNetPager針對ASP.NET分頁控件的不足,提出了與眾不同的解決asp.net中分頁問題的方案,即將分頁導航功能與數據顯示功能完全獨立開來,由用戶自己控制數據的獲取及顯示方式,因此可以被靈活地應用於任何需要實現分頁導航功能的地方,如為GridView、DataList以及Repeater等數據綁定控件實現分頁、呈現自定義的分頁數據以及制作圖片瀏覽程序等,因為AspNetPager控件和數據是獨立的,因此要分頁的數據可以來自任何數據源,如SQL Server、Oracle、Access、mysql、DB2等數據庫以及XML文件、內存數據或緩存中的數據、文件系統等等。
1.首先下載aspnetpager控件,我這兒的版本是6.0.0.0 點擊下載
2.把控件加到項目中(添加自定義控件的方法),並把它拖放到頁面上:
<webdiyer:AspNetPager ID="AspNetPager1" runat="server"
AlwaysShow="True" //總是顯示分頁控件,即使要分頁的數據只有壹頁
OnPageChanged="AspNetPager1_PageChanged" //分頁發生改變時觸發事件
UrlPaging="true" //通過URL傳遞分頁信息的方式來分頁。如果設為true,禁用ViewState也能達到效果。如果設置為false,禁用了viewstate則無法實現分頁.
NumericButtonTextFormatString="[{0}]" //頁索引數字顯示的格式
ShowCustomInfoSection="Left"> //顯示當前頁和總頁數信息,默認值不顯示,為left則將顯示在頁索引前,為right則為頁索引後 </webdiyer:AspNetPager>
3.Page_Load事件:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindGridView();
}
}
BindGridView方法如下:
public void BindGridView()
{
string sql = "select * from gw_newsletter_group";//自定義的SQL語句
int recordcount;
DataSet ds = GetPage(sql, this.AspNetPager1.CurrentPageIndex, this.AspNetPager1.PageSize,out recordcount);
this.AspNetPager1.RecordCount = recordcount;
this.GridView1.DataSource = ds;
this.GridView1.DataBind();
AspNetPager1.CustomInfoHTML = "記錄總數:<b>" + AspNetPager1.RecordCount.ToString() + "</b>";
AspNetPager1.CustomInfoHTML += " 總頁數:<b>" + AspNetPager1.PageCount.ToString() + "</b>";
AspNetPager1.CustomInfoHTML += " 當前頁:<font color=\"red\"><b>" + AspNetPager1.CurrentPageIndex.ToString() + "</b></font>";
}
其中的GetPage方法代碼如下:(GetConnection()是返回壹個SqlConnection對象)
/// <summary>
/// Get Data By CurrentPage
/// </summary>
/// <param name="sql">SQL</param>
/// <param name="currentPage">current Page</param>
/// <param name="pagesize">Page Size</param>
/// <param name="recordcount">Total Record</param>
/// <returns></returns>
public DataSet GetPage(string sql, int currentPage, int pagesize,out int recordcount)
{
SqlDataAdapter ada = new SqlDataAdapter(sql, GetConnection());
DataSet ds = new DataSet();
int startRow = (currentPage - 1) * pagesize;
ada.Fill(ds, startRow, pagesize, "table");
recordcount = GetPageRecord(sql);
return ds;
}
GetPageRecord方法:(返回總的記錄數)
public int GetPageRecord(string sql)
{
sql = System.Text.RegularExpressions.Regex.Replace(sql, "ORDER BY.*", "");
sql = "select count(*) from (" + sql + ") as temp";
SqlCommand cmd = new SqlCommand(sql, GetConnection());
cmd.Connection.Open();
int recordcount = (int)cmd.ExecuteScalar();
return recordcount;
}
這裏註意要去掉”Order By“的字符串(聚合函數不能和"ORDER BY"連用)
4.另外:還有個事件:
protected void AspNetPager1_PageChanged(object sender, EventArgs e)
{
BindGridView();
}