非資料庫資料來源分頁的實現

來源:互聯網
上載者:User
分頁|資料|資料庫|資料來源  

暫時測試地址:
202.127.144.107/overred/nodatapage.htm
下載地址:
chinaeduonline.net/rar/nodatapage.rar
裡面有詳細的說明

主要代碼:

把ArrayList(或數組)的資料來源綁定到repeater,並進行分頁
+++demo++++
aspx
__________________________________________
<body>
<form id="Form1" method="post" runat="server">
<FONT face="宋體">
<P><asp:repeater id="rtest" runat="server" DataMember="1">
<ItemTemplate>
<font color="#ff3366">
<%#Container.DataItem%>
<br>
</font>
</ItemTemplate>
</asp:repeater></P>
<P>當前頁: 
<asp:Label id="dq" runat="server">1</asp:Label></P>
<P>
<asp:Label id="link" runat="server">Label</asp:Label></P>
</FONT>
</form>
</body>
____________________________________________________

.cs
____________________________________________________________
public class t1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label dq;
protected System.Web.UI.WebControls.Label link;
protected System.Web.UI.WebControls.Label d;
protected System.Web.UI.WebControls.Repeater rtestt;
protected System.Web.UI.WebControls.Repeater rtest;
private int pagesize;//每頁顯示的記錄數目


public void Page_Load(object sender, System.EventArgs e)
{
// 在此處放置使用者代碼以初始化頁面
if(!Page.IsPostBack)
pagesize=40; //每頁顯示的記錄數目
this.rtest.DataSource=Datasource();//直接綁定到資料來源
this.rtest.DataBind();
}

//設定ArrayList,供ArrayList Datasource()調用
public ArrayList Data()
{
//++++給repeater構造資料來源,長度變數為j+++++++++++++++++++++++++++++++++++++++++++++++++++++
ArrayList s=new ArrayList();
for(int j=1;j<100;j++)
s.Add("aa"+j.ToString());
return s;

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
#region  對資料的具體分頁
private ArrayList Datasource()
{

ArrayList s=Data();
{
//再次構造一個ArrayList,作為每個頁面顯示的資料
ArrayList subs=new ArrayList();
int rek=Int32.Parse(Request.QueryString["page"]);
dq.Text=(rek+1).ToString();

//如果是能被整除,如總記錄數為20,每頁顯示4條記錄,所以就整除,要是每頁顯示3條記錄,則在最後頁為2條記錄
if(s.Count==pagesize*(s.Count/pagesize))
{
for(int link=0;link<s.Count/pagesize;link++)
{
Response.Write("頁:<a href=t1.aspx?page="+(link)+">"+(link+1)+"</"+"a>";

}
}
//不能被整除的處理
if(s.Count!=pagesize*(s.Count/pagesize))
{
for(int link=0;link<(s.Count/pagesize)+1;link++)
{
Response.Write("頁:<a href=t1.aspx?page="+(link) +">"+(link+1)+"</"+"a>";

}
}


//判斷是否能記錄是否能被頁數整除
if(s.Count==pagesize*(s.Count/pagesize))
{
int k=rek;
if((k*pagesize)<s.Count)
{
for(int i=(pagesize*k);i<(pagesize*k+pagesize);i++)
{
subs.Add(s[i]);
}
}
}

//不能整除,對最後頁的設定.如總記錄數為20,每頁顯示3條記錄,以下就設定就只顯示最後也的那2條記錄
if(rek==s.Count/pagesize)
{
int k=rek;
for(int i=(pagesize*k);i<(s.Count);i++)
{

subs.Add(s[i]);
}

}


else
{
int k=rek;

{
for(int i=(pagesize*k);i<(pagesize*k+pagesize);i++)
{

subs.Add(s[i]);
}
}


}
if(s.Count==pagesize*(s.Count/pagesize))
{
Response.Write("共"+s.Count/pagesize+"頁";
}
else
{
Response.Write("共"+(1+s.Count/pagesize)+"頁";
}
return subs;
}

}
#endregion

#region Web Form設計器產生的程式碼
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 該調用是 ASP.NET Web Form設計器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 設計器支援所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}

思路:
建立個ArrayList Data(),儲存所有的資料.
而ArrayList Datasource()則為從總的資料來源中取要顯示的某部分.
也就是你看到的當前頁的資料.

實現方法:
首先找到當前頁的開始位置i,(即s[i]中的i是幾)和當前頁結束時的i
並把他們添加到ArrayList subs中
其中ArrayList subs只儲存當前頁的記錄.

主要變數聲明:
pagesize 每頁顯示的記錄數目
j 資料來源的總記錄數值(我設定的為99,因為1=j<100)

用途:
這樣只要你把資料庫中的記錄查詢後,把他添加到ArrayList s裡
就可以直接
pagesize=40; //每頁顯示的記錄數目
this.rtest.DataSource=Datasource();//直接綁定到資料來源
this.rtest.DataBind();
綁定,並分頁.(也可以封裝為一個組件使用)

說明:對datalist和datagrid的我還沒研究.此方法是我偶想到的,具體的用法我會進步"開發".暫時首也需要帶參數page.
需要工程檔案的給我要吧.

示範效果:
頁:1頁:2頁:3共3頁

aa81
aa82
aa83
aa84
aa85
aa86
aa87
aa88
aa89
aa90
aa91
aa92
aa93
aa94
aa95
aa96
aa97
aa98
aa99


當前頁: 3



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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