可以这样子for(int i=0;i<PageSize*CurrentPageSize;i++)
{
dr.read();
}
...

解决方案 »

  1.   

    datareader不是内存中的数据库在显示完成后就消失了,无法完成分页。如果非要追求速度,可以使用sql语言的top语句。在触发分页事件时在后台数据库不停的检索“相对”靠前的数据。可以完成分页效果。
      

  2.   

    参考:解决分页的例子。使用DataSet绑定到DataList实现的。数据库使用我刚才贴的这个。 
     blood 发表于 5/28/2002 4:13:21 PM ASP.NET ←返回版面         [快速返回] using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Web;
    using System.Web.UI.WebControls;namespace OSLeagueForumXP.admin
    {
        /// <summary>
        /// 编辑公告页面
        /// </summary>
        public class EditBoardPage : System.Web.UI.Page
        {
            protected System.Web.UI.WebControls.HyperLink hlkPrev;
            protected System.Web.UI.WebControls.HyperLink hlkNext;
            protected System.Web.UI.WebControls.HyperLink hlkFirst;
            protected System.Web.UI.WebControls.HyperLink hlkEnd;
            protected System.Web.UI.WebControls.Label lblPage;
            protected System.Web.UI.WebControls.Panel pelMain;
            protected System.Web.UI.WebControls.Label lblMessage;
            protected System.Web.UI.WebControls.HyperLink hlkReturn;
            protected System.Web.UI.WebControls.Panel pelMessage;
            protected System.Web.UI.WebControls.DataList DLBoard;
        
            private void Page_Load(object sender, System.EventArgs e)
            {
                Process clsProcess = new Process();
                clsProcess.Common();
                
                const int PAGESIZE = 5;
                int intPageCount;
                int intPage;
                if(Request.QueryString["Page"] == null)
                {
                    intPage = 1;
                }
                else
                {
                    intPage = Int32.Parse(Request.QueryString["Page"]);
                }
                int intStart = (intPage - 1) * PAGESIZE;
                
                SqlDataReader SqlReader = clsProcess.GetBoardCount();
                if(SqlReader.Read())
                {
                    intPageCount = (int)SqlReader["PageCount"];
                }
                else
                {
                    intPageCount = 0;
                }
                
                int intAllPage = (int) Math.Floor(intPageCount / PAGESIZE) + 1;
                
                DLBoard.DataSource = clsProcess.GetBoard(intStart,PAGESIZE);
                DLBoard.DataBind();
                
                if(clsProcess.GetBoard(intStart,PAGESIZE).Count == 0)
                {
                    lblMessage.Text = "出现错误:<font color=\"red\">没有公告,请先添加公告</font>";
                    hlkReturn.Text = "添加公告";
                    pelMain.Visible = false;
                    pelMessage.Visible = true;
                }
                else
                {
                    lblPage.Text = intAllPage.ToString() + "/" + intPage.ToString();
                    
                    if(intAllPage == 1)
                    {
                        hlkFirst.NavigateUrl = "";
                        hlkPrev.NavigateUrl = "";
                        hlkNext.NavigateUrl = "";
                        hlkEnd.NavigateUrl = "";
                    }
                    else if(intPage == 1)
                    {
                        hlkFirst.NavigateUrl = "";
                        hlkPrev.NavigateUrl = "";
                        hlkNext.NavigateUrl = "editboard.aspx?Page=" + (intPage + 1);
                        hlkEnd.NavigateUrl = "editboard.aspx?Page=" + intAllPage;
                    }
                    else if(intPage == intAllPage)
                    {
                        hlkFirst.NavigateUrl = "editboard.aspx?Page=1";
                        hlkPrev.NavigateUrl = "editboard.aspx?Page=" + (intPage - 1);
                        hlkNext.NavigateUrl = "";
                        hlkEnd.NavigateUrl = "";
                    }
                    else
                    {
                        hlkFirst.NavigateUrl = "editboard.aspx?Page=1";
                        hlkPrev.NavigateUrl = "editboard.aspx?Page=" + (intPage - 1);
                        hlkNext.NavigateUrl = "editboard.aspx?Page=" + (intPage + 1);
                        hlkEnd.NavigateUrl = "editboard.aspx?Page=" + intAllPage;
                    }
                }
            }        #region Web Form Designer generated code
            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
        }
    }
      

  3.   

    To:ponycsdn(驰骏) 我觉得你的方法可行,我也是想结合SQL语句来实现,但不知道具体如何做,是不是还得用到ViewStat[]吧,能给个简单的例子么?