欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Asp.Net分頁(yè)和AspNetPager控件的使用

 更新時(shí)間:2011年02月19日 18:03:19   作者:  
在Asp.Net中對(duì)頁(yè)面分頁(yè)的方法很多,可以直接用sql語(yǔ)句分,也可以使用.net提供的PageDataSource類來(lái)分頁(yè),顯示的視圖同樣可以使用第三方控件AspNetPager等來(lái)顯示。
下面就來(lái)重點(diǎn)說(shuō)說(shuō)這幾種分頁(yè)方式:

一般情況下我們都是通過(guò)sql語(yǔ)句來(lái)分頁(yè),這在無(wú)論哪種開發(fā)語(yǔ)音都是通用的,

使用sql語(yǔ)句或者存儲(chǔ)過(guò)程分頁(yè)的方式最主要的是要在讀取數(shù)據(jù)的時(shí)候把sql語(yǔ)句或者存儲(chǔ)過(guò)程寫好,它的原理是只讀取當(dāng)前要顯示的幾行記錄,所以要根據(jù)頁(yè)數(shù)和每頁(yè)顯示的數(shù)目來(lái)寫語(yǔ)句,如下:

Select top pageSize * from News where id not in(select top (Page-1)*pageSize id from News)

很顯然只要將pageSize和Page作為參數(shù)就可以了,然后再前臺(tái)調(diào)用的時(shí)候只要指定當(dāng)前頁(yè)數(shù)和每頁(yè)顯示的數(shù)目,就可以實(shí)現(xiàn)分頁(yè)了,為了顯示總數(shù)目,還可以讀取所有數(shù)目,需要注意的時(shí)候,如果是自定義分頁(yè)視圖,由于.net在回傳的時(shí)候不保存當(dāng)前頁(yè),所以要使用ViewState來(lái)保存頁(yè)數(shù),每次只讀取所需要的幾條記錄,所以適合做大型網(wǎng)站數(shù)量比較大的時(shí)候使用

另外一種分頁(yè)方式就是使用.net提供的PageDataSource類來(lái)分頁(yè),

PageDataSource是微軟提供一個(gè)用于分頁(yè)使用的類,集成了綁定控件的一些方法,在使用的時(shí)候,我們只需要從數(shù)據(jù)庫(kù)讀取我們所要的數(shù)據(jù),綁定到PageDataSource即可,然后允許PageDataSource可以分頁(yè),指定當(dāng)前頁(yè)和每頁(yè)要顯示的數(shù)目,這樣就可以很好的獲得的總的數(shù)目,結(jié)合控件,ViewState就可以完成自定義分頁(yè)視圖,方法如下:

        PagedDataSource pageDataSource = new PagedDataSource();

        pageDataSource.DataSource = NewsManager.GetNews();//所有記錄

        pageDataSource.AllowPaging = true;

        pageDataSource.PageSize = 16;

        pageDataSource.CurrentPageIndex = Pager– 1;

        this.Repeater1.DataSource = pageDataSource;

        this.Repeater1.DataBind();

由于PageDataSource是將所有的數(shù)據(jù)都讀出來(lái),然后再分頁(yè)的,所有適合一些小型網(wǎng)站,比如企業(yè)站,數(shù)量不是很大的時(shí)候使用,大概2w以內(nèi)的數(shù)據(jù)使用

上面是常用的兩種分頁(yè)方式,下面在來(lái)看看分頁(yè)視圖控件AspNetPager的用法:

AspNetPager屬于第三方控件,就是說(shuō)既不是微軟開發(fā)的,也不是你開發(fā)的,而是由其他技術(shù)員自己開發(fā)的,共享給我們用的控件,所以在使用的時(shí)候,我們首先要從網(wǎng)上下載下來(lái),然后和其他控件一樣,首先將其放到工具箱內(nèi),這里你可以直接拖進(jìn)來(lái),或者也可以右擊工具菜單項(xiàng)---選擇項(xiàng),找到目錄添加進(jìn)來(lái)即可

下面簡(jiǎn)單說(shuō)一下它的一些屬性和方法

  AlwaysShow:表示當(dāng)前在只有一頁(yè)的時(shí)候,控件是顯示還是不顯示

  PageSize:每頁(yè)要顯示的數(shù)目

  RecordCount:總數(shù)目

  NumericButtonCount:每頁(yè)要顯示的頁(yè)碼數(shù)目

  注:上面三個(gè)屬性就是用來(lái)顯示分頁(yè)控件的視圖,但是他們只是為了顯示分頁(yè)控件的視圖。

  FirstPageText="第一頁(yè)"

 LastPageText="最后一頁(yè)"

 NextPageText="下一頁(yè)"

  PrevPageText="前一頁(yè)"

  PagingButtonSpacing="12":每個(gè)頁(yè)碼之間的寬度

 NumericButtonTextFormatString="[{0}]" :頁(yè)碼顯示的樣式

  EnableUrlRewriting="true":是否啟用url重寫,默認(rèn)的情況下是域名?page=頁(yè)碼

  如:http://www.hnzbtb.com/NewList.aspx?page=3,不過(guò)你可以對(duì)其修改 重新

UrlRewritePattern:重寫的url,如:AspNetPager1.UrlRewritePattern = "NewList.aspx?dd={0}"

注:這里要提到的是如果要改變要顯示頁(yè)碼的參數(shù),那就必須修改顯示,然后再修改url中的參數(shù)

  UrlPaging="True" :是否只用url傳遞參數(shù)來(lái)顯示分頁(yè),如果是FALSE,則url不變,狀態(tài)欄則顯示

 SubmitButtonText="轉(zhuǎn)到" ShowInputBox="Always":用來(lái)解決轉(zhuǎn)到按鈕的顯示

兩個(gè)常用的方法

1、PageChanging:分頁(yè)之前的操作,所以要想獲得當(dāng)前控件的頁(yè)碼就必須在方法內(nèi)賦值才可以,否則AspNetPager1.CurrentPageIndex永遠(yuǎn)獲得的當(dāng)前頁(yè)的值都是1,因?yàn)榫拖喈?dāng)于你沒點(diǎn)擊任何頁(yè)碼,從開始都是1,所以你無(wú)論點(diǎn)擊那個(gè)頁(yè)碼說(shuō),之前的都是1

  protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)

    {

        Pager = e.NewPageIndex - 1;

        DataBindNews();

}

  public void DataBindNews()

    {

        PagedDataSource pageDataSource = new PagedDataSource();

        pageDataSource.DataSource = NewsManager.GetNews();

        pageDataSource.AllowPaging = true;

        AspNetPager1.RecordCount = NewsManager.GetNewsCount();

        pageDataSource.PageSize = 16;

        pageDataSource.CurrentPageIndex = Pager;

        this.Repeater1.DataSource = pageDataSource;

        this.Repeater1.DataBind();

    }

之所以減1是因?yàn)橐Y(jié)合的分頁(yè)方法和PageDataSource都是從0開始的

GrilView中自定義的分頁(yè),我們也會(huì)用到它的

     protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)

    {

        this.GridView1.PageIndex = e.NewPageIndex;

        dataBindProduct(0, null);

}

 

2、PageChanged:點(diǎn)擊頁(yè)碼之后的操作,所以可以直接通過(guò)AspNetPager1.CurrentPageIndex – 1獲得當(dāng)前頁(yè)的頁(yè)數(shù),因?yàn)橹按_實(shí)點(diǎn)擊了頁(yè)碼數(shù),很顯然會(huì)獲得當(dāng)前的頁(yè)碼數(shù)

     protected void AspNetPager1_PageChanged(object src,EventArgs e)

    {

        DataBindNews();

}

  public void DataBindNews()

    {

        PagedDataSource pageDataSource = new PagedDataSource();

        pageDataSource.DataSource = NewsManager.GetNews();

        pageDataSource.AllowPaging = true;

        AspNetPager1.RecordCount = NewsManager.GetNewsCount();

        pageDataSource.PageSize = 16;

        pageDataSource.CurrentPageIndex = AspNetPager1.CurrentPageIndex – 1;

        this.Repeater1.DataSource = pageDataSource;

        this.Repeater1.DataBind();

    }

如果使用了AspNetPager來(lái)分頁(yè),那么只要指定總數(shù)給aspNetPager,當(dāng)前頁(yè)用aspNetPager來(lái)指定,并保證每頁(yè)顯示的數(shù)目aspNetPager和PageDataSource指定的一致就可以實(shí)現(xiàn)分頁(yè)了,簡(jiǎn)單吧,這個(gè)頁(yè)數(shù)的控制就不使用viewstate來(lái)保存了,頁(yè)數(shù)和頁(yè)顯示記錄直接通過(guò)Asp.Net來(lái)控制就行了

需要注意的是有些需要一致的東西,如果沒有一致,就有可能導(dǎo)致不協(xié)調(diào),比如該分4頁(yè)的,但是aspNetPager只顯示了2頁(yè)等,這些都需要注意的!

下面簡(jiǎn)單分享一下分頁(yè)控件的一個(gè)樣式:

Css樣式:


.pages
{
 color: #999;
}
.pages a, .pages .cpb
{
 text-decoration: none;
 float: left;
 padding: 0 5px;
 border: 1px solid #075198;
 background: #ffff;
 margin: 0 2px;
 font-size: 11px;
 color: #000;
}
.pages a:hover
{
 background-color: #075198;
 color: #fff;
 border: 1px solid #075198;
 text-decoration: none;
}
.pages .cpb
{
 font-weight: bold;
 color: #fff;
 background: #075198;
 border: 1px solid #075198;
}

相關(guān)文章

最新評(píng)論