DataList自定义分页
生活随笔
收集整理的這篇文章主要介紹了
DataList自定义分页
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Asp.net里頭,像DataList,Repeater,DataGrid,GridView,FormView包括Asp.net3.5中的ListView這幾種服務(wù)器數(shù)據(jù)綁定控件,是在開發(fā)中經(jīng)常需要用到的,撇開Asp.net3.5(因為3.5的版本有帶分頁的控件),DataGrid是1.1版本中很強(qiáng)大的控件,GridView則是2.0中有的,其實(shí)就是DataGrid的升級版,他們自身都帶有分頁功能,只需設(shè)置下屬性,而DataList和Repeater則沒有,下面就以DataList為例實(shí)現(xiàn)自定義分頁.
??????首先,先來看一個類:PagedDataSource其成員如下:
??????有發(fā)現(xiàn)什么沒?可以看到這些屬性在GridView等有內(nèi)置分頁的控件中是類似的,所以這些有內(nèi)置分頁的控件也是通過該類實(shí)現(xiàn)分頁的,那下來就好辦了
前臺Html代碼:
共:<asp:Label??id="lblPageTotal"?runat="server"></asp:Label>頁???
<asp:LinkButton?id="lbFirst"?onclick="PagerButton_Click"?runat="server"?CommandArgument="first">首?頁</asp:LinkButton>?
<asp:LinkButton??id="lbPrev"?onclick="PagerButton_Click"?runat="server"?CommandArgument="prev">上一頁</asp:LinkButton>?
<asp:LinkButton??id="lbNext"?onclick="PagerButton_Click"?runat="server"?CommandArgument="next">下一頁</asp:LinkButton>?
<asp:LinkButton?id="lbLast"?onclick="PagerButton_Click"?runat="server"?CommandArgument="last">尾?頁</asp:LinkButton>???
當(dāng)前:第<asp:Label??id="lblCurrentPage"?runat="server"></asp:Label>頁???
跳轉(zhuǎn)至:第<asp:DropDownList?ID="ddlPage"?runat="server"?AutoPostBack="true"?OnSelectedIndexChanged="ddlPage_SelectedIndexChanged"></asp:DropDownList>頁后臺.cs代碼:
Code
protected?void?Page_Load(object?sender,?EventArgs?e)
{
???if?(!IsPostBack)
???{
??????ViewState["PageIndex"]?=?"0";?//第一次生成,頁碼索引置0
??????this.BindGrid();
??????ddlPage.Items.Clear();
??????for?(int?i?=?0;?i?<?Int32.Parse(lblPageTotal.Text);?i++)
??????{
?????????string?itemText?=?(i?+?1).ToString();
?????????ddlPage.Items.Add(new?ListItem(itemText,?itemText));
??????}
???}
}綁定數(shù)據(jù)源的方法
Code
private?void?BindGrid()
{
????DataTable?table?=?this.CreateTable();??//CreateTable這個方法就是獲取數(shù)據(jù)源的了,這里不貼了
????if?(table.Rows.Count?>?0)
????{
????????//對PagedDataSource?對象的相關(guān)屬性賦值
?????????objPDS?=?new?PagedDataSource();
????????objPDS.DataSource?=?table.DefaultView;
????????objPDS.AllowPaging?=?true;
????????objPDS.PageSize?=?this.ListSize;??//ListSize屬性用于設(shè)置每頁顯示多少條,可以直接指定
????????objPDS.CurrentPageIndex?=?int.Parse(ViewState["PageIndex"].ToString());
????????lbFirst.Enabled?=?true;
????????lbPrev.Enabled?=?true;
????????lbNext.Enabled?=?true;
????????lbLast.Enabled?=?true;
????????//判斷當(dāng)前頁是否首頁
?????????if?(objPDS.IsFirstPage)
????????{
????????????lbFirst.Enabled?=?false;
????????????lbPrev.Enabled?=?false;
????????}
????????//判斷當(dāng)前頁是否尾頁
?????????if?(objPDS.IsLastPage)
????????{
????????????lbNext.Enabled?=?false;
????????????lbLast.Enabled?=?false;
????????}
????????this.dl_LinkList.DataSource?=?objPDS;
????????this.dl_LinkList.DataBind();
????????lblPageTotal.Text?=?objPDS.PageCount.ToString();
????????lblCurrentPage.Text?=?(objPDS.CurrentPageIndex?+?1).ToString();
?????}
?????else
?????{
????????this.dl_LinkList.DataSource?=?table;
????????this.dl_LinkList.DataBind();
?????}
}觸發(fā)分頁按鈕的事件
Code
protected?void?PagerButton_Click(object?sender,?EventArgs?e)
{
???string?arg?=?((LinkButton)sender).CommandArgument.ToString().ToLower();
???int?pageIndex?=?int.Parse(ViewState["PageIndex"].ToString());
???switch?(arg)
???{
???????case?"first":
????????????pageIndex?=?0;
????????????break;
???????case?"last":
????????????int?itemCount?=?this.GetDataSource().Rows.Count;
????????????int?totalPage?=?itemCount?%?this.ListSize?==?0???itemCount?/?ListSize?:?itemCount?/?(ListSize?+?1);
????????????pageIndex?=?totalPage?-?1;
????????????break;
???????case?"prev":
????????????pageIndex?=?pageIndex?-?1;
????????????break;
???????case?"next":
????????????pageIndex?=?pageIndex?+?1;
????????????break;
????}
????ViewState["PageIndex"]?=?pageIndex;
????this.BindGrid();
????ddlPage.SelectedIndex?=?pageIndex;
}觸發(fā)下拉框的事件
Code
protected?void?ddlPage_SelectedIndexChanged(object?sender,?EventArgs?e)
{
???ViewState["PageIndex"]?=?Int32.Parse(ddlPage.SelectedValue)-1;
???this.BindGrid();
???ddlPage.SelectedIndex?=?Int32.Parse(ViewState["PageIndex"].ToString());
}代碼很簡單,就不解釋了...要注意的是,下拉框要在頁面載入的時候初始化,不然觸發(fā)不到下拉框的事件.
??????首先,先來看一個類:PagedDataSource其成員如下:
| AllowCustomPaging | 獲取或設(shè)置一個值,指示是否在數(shù)據(jù)綁定控件中啟用自定義分頁。 | |
| AllowPaging | 獲取或設(shè)置一個值,指示是否在數(shù)據(jù)綁定控件中啟用分頁。 | |
| AllowServerPaging | 獲取或設(shè)置一個值,指示是否啟用服務(wù)器端分頁。 | |
| Count | 獲取要從數(shù)據(jù)源使用的項數(shù)。 | |
| CurrentPageIndex | 獲取或設(shè)置當(dāng)前頁的索引。 | |
| DataSource | 獲取或設(shè)置數(shù)據(jù)源。 | |
| DataSourceCount | 獲取數(shù)據(jù)源中的項數(shù)。 | |
| FirstIndexInPage | 獲取頁面中顯示的首條記錄的索引。 | |
| IsCustomPagingEnabled | 獲取一個值,該值指示是否啟用自定義分頁。 | |
| IsFirstPage | 獲取一個值,該值指示當(dāng)前頁是否是首頁。 | |
| IsLastPage | 獲取一個值,該值指示當(dāng)前頁是否是最后一頁。 | |
| IsPagingEnabled | 獲取一個值,該值指示是否啟用分頁。 | |
| IsReadOnly | 獲取一個值,該值指示數(shù)據(jù)源是否是只讀的。 | |
| IsServerPagingEnabled | 獲取一個值,指示是否啟用服務(wù)器端分頁支持。 | |
| IsSynchronized | 獲取一個值,該值指示是否同步對數(shù)據(jù)源的訪問(線程安全)。 | |
| PageCount | 獲取顯示數(shù)據(jù)源中的所有項所需要的總頁數(shù)。 | |
| PageSize | 獲取或設(shè)置要在單頁上顯示的項數(shù)。 | |
| SyncRoot | 獲取可用于同步集合訪問的對象。 | |
| VirtualCount | 獲取或設(shè)置在使用自定義分頁時數(shù)據(jù)源中的實(shí)際項數(shù)。 |
前臺Html代碼:
共:<asp:Label??id="lblPageTotal"?runat="server"></asp:Label>頁???
<asp:LinkButton?id="lbFirst"?onclick="PagerButton_Click"?runat="server"?CommandArgument="first">首?頁</asp:LinkButton>?
<asp:LinkButton??id="lbPrev"?onclick="PagerButton_Click"?runat="server"?CommandArgument="prev">上一頁</asp:LinkButton>?
<asp:LinkButton??id="lbNext"?onclick="PagerButton_Click"?runat="server"?CommandArgument="next">下一頁</asp:LinkButton>?
<asp:LinkButton?id="lbLast"?onclick="PagerButton_Click"?runat="server"?CommandArgument="last">尾?頁</asp:LinkButton>???
當(dāng)前:第<asp:Label??id="lblCurrentPage"?runat="server"></asp:Label>頁???
跳轉(zhuǎn)至:第<asp:DropDownList?ID="ddlPage"?runat="server"?AutoPostBack="true"?OnSelectedIndexChanged="ddlPage_SelectedIndexChanged"></asp:DropDownList>頁后臺.cs代碼:
Code
protected?void?Page_Load(object?sender,?EventArgs?e)
{
???if?(!IsPostBack)
???{
??????ViewState["PageIndex"]?=?"0";?//第一次生成,頁碼索引置0
??????this.BindGrid();
??????ddlPage.Items.Clear();
??????for?(int?i?=?0;?i?<?Int32.Parse(lblPageTotal.Text);?i++)
??????{
?????????string?itemText?=?(i?+?1).ToString();
?????????ddlPage.Items.Add(new?ListItem(itemText,?itemText));
??????}
???}
}綁定數(shù)據(jù)源的方法
Code
private?void?BindGrid()
{
????DataTable?table?=?this.CreateTable();??//CreateTable這個方法就是獲取數(shù)據(jù)源的了,這里不貼了
????if?(table.Rows.Count?>?0)
????{
????????//對PagedDataSource?對象的相關(guān)屬性賦值
?????????objPDS?=?new?PagedDataSource();
????????objPDS.DataSource?=?table.DefaultView;
????????objPDS.AllowPaging?=?true;
????????objPDS.PageSize?=?this.ListSize;??//ListSize屬性用于設(shè)置每頁顯示多少條,可以直接指定
????????objPDS.CurrentPageIndex?=?int.Parse(ViewState["PageIndex"].ToString());
????????lbFirst.Enabled?=?true;
????????lbPrev.Enabled?=?true;
????????lbNext.Enabled?=?true;
????????lbLast.Enabled?=?true;
????????//判斷當(dāng)前頁是否首頁
?????????if?(objPDS.IsFirstPage)
????????{
????????????lbFirst.Enabled?=?false;
????????????lbPrev.Enabled?=?false;
????????}
????????//判斷當(dāng)前頁是否尾頁
?????????if?(objPDS.IsLastPage)
????????{
????????????lbNext.Enabled?=?false;
????????????lbLast.Enabled?=?false;
????????}
????????this.dl_LinkList.DataSource?=?objPDS;
????????this.dl_LinkList.DataBind();
????????lblPageTotal.Text?=?objPDS.PageCount.ToString();
????????lblCurrentPage.Text?=?(objPDS.CurrentPageIndex?+?1).ToString();
?????}
?????else
?????{
????????this.dl_LinkList.DataSource?=?table;
????????this.dl_LinkList.DataBind();
?????}
}觸發(fā)分頁按鈕的事件
Code
protected?void?PagerButton_Click(object?sender,?EventArgs?e)
{
???string?arg?=?((LinkButton)sender).CommandArgument.ToString().ToLower();
???int?pageIndex?=?int.Parse(ViewState["PageIndex"].ToString());
???switch?(arg)
???{
???????case?"first":
????????????pageIndex?=?0;
????????????break;
???????case?"last":
????????????int?itemCount?=?this.GetDataSource().Rows.Count;
????????????int?totalPage?=?itemCount?%?this.ListSize?==?0???itemCount?/?ListSize?:?itemCount?/?(ListSize?+?1);
????????????pageIndex?=?totalPage?-?1;
????????????break;
???????case?"prev":
????????????pageIndex?=?pageIndex?-?1;
????????????break;
???????case?"next":
????????????pageIndex?=?pageIndex?+?1;
????????????break;
????}
????ViewState["PageIndex"]?=?pageIndex;
????this.BindGrid();
????ddlPage.SelectedIndex?=?pageIndex;
}觸發(fā)下拉框的事件
Code
protected?void?ddlPage_SelectedIndexChanged(object?sender,?EventArgs?e)
{
???ViewState["PageIndex"]?=?Int32.Parse(ddlPage.SelectedValue)-1;
???this.BindGrid();
???ddlPage.SelectedIndex?=?Int32.Parse(ViewState["PageIndex"].ToString());
}代碼很簡單,就不解釋了...要注意的是,下拉框要在頁面載入的時候初始化,不然觸發(fā)不到下拉框的事件.
轉(zhuǎn)載于:https://www.cnblogs.com/py891021/archive/2009/08/19/1549559.html
總結(jié)
以上是生活随笔為你收集整理的DataList自定义分页的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 羊圈
- 下一篇: css 垂直居中的几种方式