小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

DataList分頁(yè)方法

 狼志凌云 2010-12-18
從Asp.net 1.1開(kāi)始,我們就開(kāi)始使用DataGrid、DataList、Repeater控件,到了Asp.net 2.0又增加了GridView控件。GridView控件在DataGrid上做了優(yōu)化和改進(jìn),功能很強(qiáng)大,但是自定義性不夠強(qiáng)。Repeater自定義性非常高。而DataList則兼而有之,其他方面本文不談。這里就說(shuō)下怎么給DataList分頁(yè)。

給DataList分頁(yè)有兩個(gè)辦法:1、自己寫(xiě) 2、用第三方控件(如AspNetPager

使用第三方控件的方法我就不說(shuō)了,這里主要說(shuō)說(shuō)如何自己實(shí)現(xiàn)分頁(yè)方法。

我的DataList分頁(yè)方法的核心原理是利用PagedDataSource對(duì)象,PagedDataSource類(lèi)封裝了DataGrid 控件的屬性,這些屬性使 DataGrid 可以執(zhí)行分頁(yè),下面是PagedDataSource的公共屬性:

AllowCustomPaging 獲取或設(shè)置指示是否啟用自定義分頁(yè)的值。
AllowPaging 獲取或設(shè)置指示是否啟用分頁(yè)的值。
Count 獲取要從數(shù)據(jù)源使用的項(xiàng)數(shù)。
CurrentPageIndex 獲取或設(shè)置當(dāng)前頁(yè)的索引。
DataSource 獲取或設(shè)置數(shù)據(jù)源。
DataSourceCount 獲取數(shù)據(jù)源中的項(xiàng)數(shù)。
FirstIndexInPage 獲取頁(yè)中的第一個(gè)索引。
IsCustomPagingEnabled 獲取一個(gè)值,該值指示是否啟用自定義分頁(yè)。
IsFirstPage 獲取一個(gè)值,該值指示當(dāng)前頁(yè)是否是首頁(yè)。
IsLastPage 獲取一個(gè)值,該值指示當(dāng)前頁(yè)是否是最后一頁(yè)。
IsPagingEnabled 獲取一個(gè)值,該值指示是否啟用分頁(yè)。
IsReadOnly 獲取一個(gè)值,該值指示數(shù)據(jù)源是否是只讀的。
IsSynchronized 獲取一個(gè)值,該值指示是否同步對(duì)數(shù)據(jù)源的訪問(wèn)(線程安全)。
PageCount 獲取顯示數(shù)據(jù)源中的所有項(xiàng)所需要的總頁(yè)數(shù)。
PageSize 獲取或設(shè)置要在單頁(yè)上顯示的項(xiàng)數(shù)。
VirtualCount 獲取或設(shè)置在使用自定義分頁(yè)時(shí)數(shù)據(jù)源中的實(shí)際項(xiàng)數(shù)。

那么如何使用 PagedDataSource對(duì)象進(jìn)行DataList分頁(yè)呢?(網(wǎng)上有很多的講DataList分頁(yè)的文章,有一些是糊弄人的,有的還無(wú)法起作用,我被騙過(guò)一次,本文是我經(jīng)過(guò)個(gè)人實(shí)踐經(jīng)驗(yàn)得到,可以順利執(zhí)行。希望對(duì)大家有所幫助。)

現(xiàn)在開(kāi)始拉!

第一步,取出數(shù)據(jù)到datatable中,然后獲得dataview,付給PagedDataSource對(duì)象

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

第二步,PagedDataSource對(duì)象objPds的設(shè)置

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

上面的這兩段代碼都是寫(xiě)在BindData()函數(shù)中的,供每次點(diǎn)擊分頁(yè)按鈕時(shí)調(diào)用。BindData()函數(shù)如下:

private void BindData()
{
string sql = “SELECT * From team”;

DataTable objTable = data.GetDataTable(sql);
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();
}
}

blockquote>

到此為止,我們已經(jīng)將數(shù)據(jù)交給了PagedDataSource,剩下的分頁(yè)將利用PagedDataSource 進(jìn)行處理??赡艽蠹易⒁獾搅耍@個(gè)數(shù)據(jù)交付是完整的數(shù)據(jù)交付,如果數(shù)據(jù)量很大會(huì)造成一定的效率低下,不過(guò)這里暫時(shí)不考慮這個(gè)問(wèn)題。有興趣的朋友可以一起探討一下。

上面的第三行代碼中的 ViewState[“pageindex”] 是用來(lái)控制PagedDataSource的當(dāng)前頁(yè)的,我們?cè)赑age_Load事件中和第三步將要將的函數(shù)中來(lái)具體講解如何利用 ViewState[“pageindex”]控制當(dāng)前頁(yè)。

BindData()函數(shù)中后面的部分是控制向前向后按鈕的顯隱的,不再多說(shuō)。

第三步,分頁(yè)控制

第二步中說(shuō)過(guò)利用 ViewState[“pageindex”] 來(lái)控制當(dāng)前頁(yè),為了在頁(yè)面加載的時(shí)候就顯示第一頁(yè),我們當(dāng)然要在Page_load事件中將 ViewState[“pageindex”]置為0。

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

我們需要加兩個(gè)按鈕(Previous、Next)來(lái)點(diǎn)擊進(jìn)行分頁(yè)控制。

<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>

兩個(gè)按鈕的 OnCommand都是IndexChanging()函數(shù),我們通過(guò)CommandArgument(pre和next)來(lái)區(qū)分到底是向前翻還是向后翻。下面是IndexChanging()函數(shù)

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

至此,我們的分頁(yè)函數(shù)已經(jīng)寫(xiě)完了。這里還有一些東西沒(méi)有說(shuō),比如顯示一共多少條記錄,當(dāng)前第幾頁(yè),一共多少頁(yè)以及每一頁(yè)的頁(yè)碼。相信看懂了上面所說(shuō)的后這些東西還是容易寫(xiě)出來(lái)的。

總結(jié)一下,我們?cè)谇芭_(tái)寫(xiě)好DataList等待數(shù)據(jù),而數(shù)據(jù)是由PagedDataSource提供的,分頁(yè)通過(guò)我們新加的兩個(gè)ImageButton來(lái)控制ViewState進(jìn)而達(dá)到控制PagedDataSource的CurrentPageIndex來(lái)實(shí)現(xiàn)的。所以,其實(shí)DataList也沒(méi)干啥事,就是顯示了每一頁(yè)的數(shù)據(jù)而已。有一點(diǎn)需要說(shuō)明,PagedDataSource的CurrentPageIndex是從0開(kāi)始的,這也是為什么在Page_load事件中要講ViewState置為0而不是1的緣故。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多