暂时测试地址: 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 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // 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

|