實現DataList的分頁

來源:互聯網
上載者:User

標籤:blog   http   使用   os   io   strong   資料   art   

前幾天在做網上商城,要展示商品資訊(有圖片,有文字),DataView雖然可以分頁,但它的缺點是不能自訂顯示格式。而DataList解決了它的缺點,但DataList本身卻不能分頁。很是頭痛,於是在網上找了些資料,問題解決了。現在將我的實現過程與大家分享下:

1、自己寫代碼(自訂控制項) 2、用第三方控制項(如AspNetPager)

我把我的自訂控制項的分享下,

 

我的DataList分頁方法的核心原理是利用PagedDataSource對象,PagedDataSource類封裝了DataGrid 控制項的屬性,這些屬性使 DataGrid 可以執行分頁,下面是PagedDataSource的公用屬性:

AllowCustomPaging 擷取或設定指示是否啟用自訂分頁的值。
AllowPaging 擷取或設定指示是否啟用分頁的值。
Count 擷取要從資料來源使用的項數。
CurrentPageIndex 擷取或設定當前頁的索引。
DataSource 擷取或設定資料來源。
DataSourceCount 擷取資料來源中的項數。
FirstIndexInPage 擷取頁中的第一個索引。
IsCustomPagingEnabled 擷取一個值,該值指示是否啟用自訂分頁。
IsFirstPage 擷取一個值,該值指示當前頁是否是首頁。
IsLastPage 擷取一個值,該值指示當前頁是否是最後一頁。
IsPagingEnabled 擷取一個值,該值指示是否啟用分頁。
IsReadOnly 擷取一個值,該值指示資料來源是否是唯讀。
IsSynchronized 擷取一個值,該值指示是否同步對資料來源的訪問(安全執行緒)。
PageCount 擷取顯示資料來源中的所有項所需要的總頁數。
PageSize 擷取或設定要在單頁上顯示的項數。
VirtualCount 擷取或設定在使用自訂分頁時資料來源中的實際項數。

 

第一步,取出資料到datatable中,然後獲得dataview,付給PagedDataSource對象

DataView objView = objTable.DefaultView;
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = objView;

第二步,PagedDataSource對象objPds的設定

objPds.AllowPaging = true;
objPds.PageSize = 4;
objPds.CurrentPageIndex = int.Parse(ViewState["pageindex"].ToString());

 

上面的這兩段代碼都是寫在BindData()函數中的,供每次點擊分頁按鈕時調用。BindData()函數如下:

private void BindData()
{
Books book = new Books();  //Books是我一個操作資料庫表的類
DataTable objTable = book.GetNewBooks(24);//book有個函數,返回結果是DataTable類型,大家根據自己的情況修改此處代碼就行了。
if (objTable != null && objTable.Rows.Count > 0)
{
DataView objView = objTable.DefaultView;
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = objView;

objPds.AllowPaging = true;
objPds.PageSize = 4;
objPds.CurrentPageIndex = int.Parse(ViewState["pageindex"].ToString());

if (!objPds.IsFirstPage)
{
lkPre.Visible = true;
}
else
{
lkPre.Visible = false;
}

if (!objPds.IsLastPage)
{
lkNext.Visible = true;
}
else
{
lkNext.Visible = false;
}

dlData.DataSource = objPds;
dlData.DataBind();
}
}

 

上面的第三行代碼中的 ViewState["pageindex"] 是用來控制PagedDataSource的當前頁的,我們在Page_Load事件中和第三步將要將的函數中來具體講解如何利用 ViewState["pageindex"]控制當前頁。

第三步,分頁控制

第二步中說過利用 ViewState["pageindex"] 來控制當前頁,為了在頁面載入的時候就顯示第一頁,我們當然要在Page_load事件中將 ViewState["pageindex"]置為0。

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["pageindex"] = "0";
BindData(); }
}

我們需要加兩個linkbutton按鈕(Previous、Next)來點擊進行分頁控制。

<asp:DataList ID="dlData" runat="server" RepeatColumns="4" >
<ItemTemplate>
<asp:Label ID="lblName" runat="server" /><br />
<asp:Label ID="lblTime" runat="server" />
</ItemTemplate>
</asp:DataList>
<asp:linkbutton ID="lkPre" OnCommand="IndexChanging" CommandArgument="pre" runat="server" >PREVIOUS PAGE></asp:linkbutton>
<asp:linkbutton ID="lkNext" OnCommand="IndexChanging" CommandArgument="next" runat="server" >NEXT PAGE</asp:linkbutton>

兩個按鈕的 OnCommand都是IndexChanging()函數,我們通過CommandArgument(pre和next)來區分到底是向前翻還是向後翻。下面是IndexChanging()函數

protected void IndexChanging(object sender, EventArgs e)
{
string strCommand = ((LinkButton)sender).CommandArgument.ToString();

int pageindex = int.Parse(ViewState["pageindex"].ToString());

if (strCommand == "pre")
{
pageindex = pageindex - 1;
}
else
{
pageindex = pageindex + 1;
}

ViewState["pageindex"] = pageindex;

BindData();
}

至此,我們的分頁函數已經寫完了。

轉載地址:http://blog.csdn.net/mane_yao/article/details/5403599

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.