aspnetpager 詳解
系統
2069 0
分頁是Web應用程序中最常用到的功能之一,在ASP.NET中,雖然自帶了一個可以分頁的DataGrid(asp.net 1.1)和GridView(asp.net 2.0)控件,但其分頁功能并不盡如人意,如可定制性差、無法通過Url實現分頁功能等,而且有時候我們需要對DataList和Repeater甚至自定義數據綁定控件進行分頁,手工編寫分頁代碼不但技術難度大、任務繁瑣而且代碼重用率極低,因此分頁已成為許多ASP.NET程序員最頭疼的問題之一。
?? 今天閑來無事就學習學習了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();
????????}
到目前為止就可以運行看到效果:
地址欄顯示效果:
注意這里是把屬性:
urlpaging=true,而且如果禁止了ViewState也能實現。
如果把
urlpaging=false
的話
如果禁止了ViewState就無法實現分頁功能了。
上面的代碼中有這樣一句話:
?AspNetPager1.CustomInfoHTML?
+=
?
"
?總頁數:<b>
"
?
+
?AspNetPager1.PageCount.ToString()?
+
?
"
</b>
"
;
這里就有一個問題是aspNetPage1.PageCount怎樣得出來的呢?我們并沒有為它賦值。(這里而且這個屬性是只讀的)
實際上它的值是本身的控件就實現了:我分析覺得代碼可能如下:
?
public
?
int
?GetPagerCount(
string
?sql,?
int
?pagesize)
????????
{
????????????
int
?recordcount?
=
?GetPageRecord(sql);//
方法見上
????????????
int
?pagecount
=
recordcount
/
pagesize;
????????????
return
?(recordcount?
%
?pagesize?
==
?
0
?
?
?pagecount?:?pagecount?
+
?
1
);
????????}
這樣就可以得出到底分頁的頁數.
最后補充說明:由于我只是初步研究這個控件,不過上面的代碼都是經過測試通過的。
而且我還發現這個控件還有很多屬性可以改變它的樣式外觀的。而且還比較靈活的。希望能給朋友們帶來一些幫助。
另外如果有什么地方不正確還希望高手能及時的提出來!
aspnetpager 詳解
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元