亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

????????}

到目前為止就可以運行看到效果: aspnetpager 詳解
地址欄顯示效果:
注意這里是把屬性: 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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费一级特黄 欧美大片 | 男女啪啪猛烈免费网站 | 亚洲国产视频在线观看 | 欧美亚洲国产一区二区三区 | 欧美日韩无线码在线观看 | 老扒夜夜春宵粗大好爽aa毛片 | 亚洲精品免费在线 | 欧美视频免费在线播放 | 久久久男女野外野战 | 2022国产91精品久久久久久 | 这里只有精品在线播放 | 久久婷婷国产麻豆91天堂 | 久久不卡一区 | 成人国产三级在线播放 | 日韩欧美黄色 | 久久6精品 | 久久婷婷综合中文字幕 | 国产欧美二区三区 | 欧美午夜场| 在线国产播放 | 最新国产午夜精品视频不卡 | 在线观看深夜视频 | 久久精品国产亚洲a | 国产精品福利尤物youwu | 99爱在线精品视频网站 | 欧美精品亚洲精品 | 毛片免费观看日本中文 | 国产成人免费高清在线观看 | 青草香蕉精品视频在线观看 | 久久国产精品国产精品 | 在线中文字幕亚洲 | 午夜影院一区二区 | 日韩高清毛片 | 男人天堂a在线 | 18视频在线观看 | 狠狠色噜噜狠狠狠狠97影音先锋 | 99re66热这里只有精品17 | 国产精品久久久久免费a∨ 国产精品久久久久免费视频 | 色播影音 | 91在线网站 | 神马影院午夜剧场 |