分頁|資料|資料庫|資料來源
暫時測試地址:
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