大家好!现在我遇到一个问题,我用下面的方式读取了每页三条记录!在页面上就只是显示三条记录!我想有“首页,上一页,下一页,未页等”这些来操作数据!请问我现在在这个基础上还要添加什么啊!我前台什么代码都没有写!麻烦大家了!!一直都在线上!
    protected void Page_Load(object sender, EventArgs e)
    {
        string str = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Fom1.mdf;Integrated Security=True;User Instance=True";
        int currentIndex = 0;
        int pagesize = 3;
        SqlConnection sql = new SqlConnection(str);
        string STR="select  * from menu order by Id";
        SqlDataAdapter da = new SqlDataAdapter(STR, sql);
        DataSet ds = new DataSet();
        da.Fill(ds,currentIndex, pagesize ,"menu");
        DataTable dt = ds.Tables[0];
        Response.Write("<table><tr><td></td><td></td></tr>");
        foreach (DataRow dr in dt.Rows)
        {
            Response.Write("<tr>");
            foreach (DataColumn dc in dt.Columns)
            {
                Response.Write("<td>" + dr[dc] + "</td>");
            }
            Response.Write("</tr>");
        }
        Response.Write("</table>");           }

解决方案 »

  1.   

    建议找下 aspnetpager,在网上找下吧,很好用的
      

  2.   

    哈哈,我简单的实现了一下下一页,其他的你可以参考实现
     public partial class DynamicControl : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                string str = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Fom1.mdf;Integrated Security=True;User Instance=True";            int currentIndex;
                if (Request.QueryString["pageIndex"] == null)
                {
                    currentIndex = 0;
                }
                else
                {
                    currentIndex = Convert.ToInt32(Request.QueryString["pageIndex"]);
                }
                int pagesize = 3;
            
                SqlConnection sql = new SqlConnection(str);
                string STR = "select * from  stu order by id";
                SqlDataAdapter da = new SqlDataAdapter(STR, sql);
                DataSet ds = new DataSet();
                da.Fill(ds, currentIndex*pagesize, pagesize, "menu");
                DataTable dt = ds.Tables[0];
                
                Response.Write("<table><tr><td></td><td></td></tr>");
                foreach (DataRow dr in dt.Rows)
                {
                    Response.Write("<tr>");
                    foreach (DataColumn dc in dt.Columns)
                    {
                        Response.Write("<td>" + dr[dc] + "</td>");
                    }
                    Response.Write("</tr>");
                   
                    
                }
                if (dt.Rows.Count < pagesize)
                {
                    Response.Write("<tr><td>下一页</td></tr>");
                }
                else
                {
                    Response.Write("<tr><td><a href = 本页面.aspx?pageIndex=" + (currentIndex + 1).ToString() + ">下一页</a></td></tr>");
                }
               
                Response.Write("</table>");
      

  3.   

    如果你用GridView控件的话,就简单多了,不知道你是没用过还是不想用
      

  4.   


    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;namespace _GNewsSysWeb
    {
        [Serializable]
        public abstract class UrlManager
        {        protected int currentPageIndex;         // 当前页码
            protected int recordCount;                  // 记录总数
            protected int pageSize;                     // 分页大小
            protected int pageCount;                    // 总页数
            protected string queryParam;                // 传递页数的参数名称        protected UrlManager(int recordCount, int pageSize, string queryParam)
            {            if (recordCount < 0)
                    throw new ArgumentOutOfRangeException("recordCount 应该大于等于 0 !");
                if (pageSize <= 0)
                    throw new ArgumentOutOfRangeException("pageSize 应该大于 0 !");
                if (String.IsNullOrEmpty(queryParam))
                    throw new ArgumentNullException("queryParam 不能为空!");            // 设置私有变量
                this.recordCount = recordCount;
                this.pageSize = pageSize;
                this.queryParam = queryParam;
                this.pageCount = getPageCount(recordCount, pageSize);
                this.currentPageIndex = getPageIndex(recordCount, pageCount, queryParam);
            }
            // 获取页码总数
            private int getPageCount(int recordCount, int pageSize)
            {
                int pageCount;            // 如果记录数为0,也认为有一页(因为至少需要进行一个显示)
                if (recordCount == 0)
                {
                    pageCount = 1;
                }
                else
                {
                    // 计算总页数
                    if (recordCount % pageSize == 0)
                        pageCount = recordCount / pageSize;
                    else
                        pageCount = (recordCount / pageSize) + 1;
                }            return pageCount;
            }        // 从Url参数中获得但前页码
            private int getPageIndex(int recordCount, int pageCount, string queryParam)
            {
                if (recordCount == 0)
                    return 1;       // 如果记录数为0,则显示为第一页            int pageIndex;            // 从Url参数获得当前页码
                string queryIndex =
                    HttpContext.Current.Request.QueryString[queryParam];            // 对页码进行一些校验
                if (string.IsNullOrEmpty(queryIndex))
                    pageIndex = 1;      // 显示第一页
                else
                {
                    try
                    {
                        pageIndex = Math.Abs(int.Parse(queryIndex));                    if (pageIndex == 0)
                            pageIndex = 1;                    // 如果当前页大于总页数,设当前页为最后一页
                        if (pageIndex > pageCount)
                            pageIndex = pageCount;
                    }
                    catch
                    {
                        pageIndex = 1;  // 显示第一页
                    }
                }            return pageIndex;
            }        public int PageCount
            {
                get { return pageCount; }
            }        public int RecordCount
            {
                get { return recordCount; }
            }        public int PageSize
            {
                get { return pageSize; }
            }        public int CurrentPageIndex
            {
                get { return currentPageIndex; }
            }
            public abstract string GetPageUrl(int pageIndex);
        }
    }
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Text.RegularExpressions;namespace _GNewsSysWeb
    {
       [Serializable]
       public class DefaultUrlManager : UrlManager
       {    public DefaultUrlManager(int recordCount, int pageSize, string queryParam)
            : base(recordCount, pageSize, queryParam) { }    public DefaultUrlManager(int recordCount, int pageSize)
           : this(recordCount, pageSize, "Page") { }    public DefaultUrlManager(int recordCount)
           : this(recordCount, 10) { }    // 获得页面Url
        public override string GetPageUrl(int pageIndex) {
            string pageUrl = HttpContext.Current.Request.RawUrl;        string pattern = @"(?<=[?&]"+ queryParam + @"=)(\d+)\b";
            Regex reg = new Regex(pattern, RegexOptions.IgnoreCase);
        
            // 如果找到匹配,也就是URL中含有类似 ?page=3 或者 &page=4 这样的字符串
            // 则对后面的数值进行替换
            if (reg.IsMatch(pageUrl)) {
                pageUrl = reg.Replace(pageUrl, pageIndex.ToString());
            } else {
                string queryString = HttpContext.Current.Request.Url.Query;            if (string.IsNullOrEmpty(queryString))
                    pageUrl += "?" + queryParam + "=" + pageIndex.ToString();
                else
                    pageUrl += "&" + queryParam + "=" + pageIndex.ToString();
            }        return pageUrl;
        }
    }}
      

  5.   


    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.ComponentModel;namespace _GNewsSysWeb
    {
        [DefaultProperty("Text")]
        [ToolboxData("<{0}:PagerControl runat=server></{0}:PagerControl>")]
        public class PagerControl : WebControl
        {        private int currentPage;                    // 当前页的页码
            private int pageCount;                      // 总页数        private bool showPrevious = false;      // 是否显示 上一页、第一页 的链接
            private bool showNext = false;          // 是否显示 下一页、最末页 的链接        private int startPage;                      // 显示的第一页 的 页码
            private int endPage;                            // 显示的最末页 的 页码        public PagerControl()
            {
                // 当前页之前可以显示的最多链接数,大于此条链接将被隐藏
                ViewState["PreviousPageCount"] = 5;            // 当前页之后可以显示的最多链接数,大于此条链接将被隐藏
                ViewState["AfterPageCount"] = 4;            // 供客户端设置样式
                ViewState["CssClass"] = "Pager";
            }        public new string CssClass
            {
                get { return ViewState["CssClass"].ToString(); }
                set { ViewState["CssClass"] = value; }
            }        public int PreviousPageCount
            {
                get { return (int)ViewState["PreviousPageCount"]; }
                set { ViewState["PreviousPageCount"] = value; }
            }        public int AfterPageCount
            {
                get { return (int)ViewState["AfterPageCount"]; }
                set { ViewState["AfterPageCount"] = value; }
            }        public UrlManager UrlManager
            {
                get { return (UrlManager)ViewState["UrlManager"]; }
                set { ViewState["UrlManager"] = value; }
            }        // 添加“第一页”,“上一页”的连接
            private void AddPreviousLink(UrlManager UrlManager, HtmlTextWriter output)
            {            output.AddAttribute(HtmlTextWriterAttribute.Class, "PagerIcon");
                output.AddAttribute(HtmlTextWriterAttribute.Title, "第一页");
                output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(1));
                output.RenderBeginTag(HtmlTextWriterTag.A);
                output.Write("&lt;&lt;");
                output.RenderEndTag();            output.AddAttribute(HtmlTextWriterAttribute.Class, "PagerIcon");
                output.AddAttribute(HtmlTextWriterAttribute.Title, "上一页");
                output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(currentPage - 1));
                output.RenderBeginTag(HtmlTextWriterTag.A);
                output.Write("&lt;");
                output.RenderEndTag();            showPrevious = false;   // 只显示一次
            }
            // 添加 “下一页”、“最末页” 的链接
            private void AddNextLink(UrlManager UrlManager, HtmlTextWriter output)
            {            output.AddAttribute(HtmlTextWriterAttribute.Class, "PagerIcon");
                output.AddAttribute(HtmlTextWriterAttribute.Title, "下一页");
                output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(currentPage + 1));
                output.RenderBeginTag(HtmlTextWriterTag.A);
                output.Write("&gt;");
                output.RenderEndTag();            output.AddAttribute(HtmlTextWriterAttribute.Class, "PagerIcon");
                output.AddAttribute(HtmlTextWriterAttribute.Title, "最末页");
                output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(pageCount));
                output.RenderBeginTag(HtmlTextWriterTag.A);
                output.Write("&gt;&gt;");
                output.RenderEndTag();            showNext = false;   // 可有可无,程序会跳出循环
            }
            // 根据当前页,当前页之前可以显示的页数,算得从第几页开始进行显示
            private void SetStartPage()
            {            // 如果当前页小于它前面所可以显示的条目数,
                // 那么显示第一页就是实际的第一页
                if (currentPage <= PreviousPageCount)
                {
                    startPage = 1;
                }
                else
                // 这种情况下 currentPage 前面总是能显示完,
                // 要根据后面的长短确定是不是前面应该多显示
                {
                    if (currentPage > PreviousPageCount + 1)
                        showPrevious = true;                int linkLength = (pageCount - currentPage + 1) + PreviousPageCount;                int startPage = currentPage - PreviousPageCount;                while (linkLength < PreviousPageCount + AfterPageCount + 1 && startPage > 1)
                    {
                        linkLength++;
                        startPage--;
                    }                this.startPage = startPage;
                }
            }        // 根据CurrentPage、总页数、当前页之后长度 算得显示的最末页是 第几页
            private void SetEndPage()
            {
                // 如果当前页加上它之后可以显示的页数 大于 总页数,
                // 那么显示的最末页就是实际的最末页
                if (currentPage + AfterPageCount >= pageCount)
                {
                    endPage = pageCount;
                }
                else
                {                // 这种情况下 currentPage后面的总是可以显示完,
                    // 要根据前面的长短确定是不是后面应该多显示                int linkLength = (currentPage - startPage + 1) + AfterPageCount;                int endPage = currentPage + AfterPageCount;                while (linkLength < PreviousPageCount + AfterPageCount + 1 && endPage < pageCount)
                    {
                        linkLength++;
                        endPage++;
                    }                if (endPage < pageCount)
                        showNext = true;                this.endPage = endPage;
                }
            }
            // 显示在页面上
            protected override void Render(HtmlTextWriter output)
            {            output.AddAttribute(HtmlTextWriterAttribute.Class, CssClass);
                output.RenderBeginTag(HtmlTextWriterTag.Div);            if (UrlManager == null)
                    throw new ArgumentNullException("UrlManager 不能为 Null");            // 获取当前页
                currentPage = UrlManager.CurrentPageIndex;            // 获取总页数
                pageCount = UrlManager.PageCount;            SetStartPage();
                SetEndPage();            // 循环打印链接
                for (int i = startPage; i <= endPage; i++)
                {
                    if (showPrevious)           // 如果需要显示前一页、第一页链接
                        AddPreviousLink(UrlManager, output);
                    if (i == currentPage)
                    {
                        output.AddAttribute(HtmlTextWriterAttribute.Class, "CurrentPage");
                    }                output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(i));
                    output.RenderBeginTag(HtmlTextWriterTag.A);
                    output.Write(i);
                    output.RenderEndTag();  // A                if (i == endPage && showNext)   // 如果需要显示 下一页、最末页 链接
                        AddNextLink(UrlManager, output);
                }            output.RenderBeginTag(HtmlTextWriterTag.Span);
                output.Write(String.Format(" ( 第<b>{0}</b>页/共<b>{1}</b>页 )", currentPage, pageCount));
                output.RenderEndTag();  // Span            output.RenderEndTag();  // Div
            }    }
    }
    测试:15万条数据,用时1s.--=====调用示例====
    declare @str varchar(200);
    set @str = 'select * from t_user  order by id' 
    exec pagination @str,4,2--=====存储过程======
    create  procedure pagination
        @sqlstr nvarchar(4000), --查询字符串
        @currentpage int, --第N页
        @pagesize int --每页行数
    as
       set nocount on
       declare @P1 int, --P1是游标的id
       @rowcount int
       exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
     
       declare @totalPage int --总页数
       set @totalpage = ceiling(1.0*@rowcount/@pagesize)
           
        --判断当前页是否大于总页数,如果大于总页数.当前页就是最后一页
       if (@currentpage>=@totalpage)
        set @currentpage = @totalpage
       if(@currentpage<1)        --如果当前页小于1,则默认当前页是1
        set @currentpage=1   print '当前页'
       print @currentpage  select @totalpage as 总页数,@currentpage as 当前页 ,@rowcount as 总记录数--,@rowcount as 总行数,@currentpage as 当前页 
     
      declare @begin int    --从哪条记录开始的
      set @begin = (@currentpage-1)*@pagesize+1  exec sp_cursorfetch @P1,16,@begin,@pagesize
      exec sp_cursorclose @P1
      set nocount off
      

  6.   

    aspnetpager分页控件
    http://topic.csdn.net/u/20100302/09/9a6bd89a-019c-4fc6-9a4d-c30501d35ec5.html
      

  7.   

    呵呵可以的!直观~看得懂!楼上的俺不是很明白!也谢谢大家的帮忙~~我会好好研究研究的!那上一页怎么写啊!这一句不明白 Response.Write("<tr><td><a href = 本页面.aspx?pageIndex=" + (currentIndex + 1).ToString() + ">下一页</a></td></tr>");
    可以告诉我吗?马上结分
      

  8.   

    Response.Write("<tr><td><a href = 本页面.aspx?pageIndex=" + (currentIndex + 1).ToString() + ">下一页</a></td></tr>");点击下一页的时候向本页发送GET请求