求一个淘宝分页的例子。。
我是动态输出分页的HTML代码,关键是算法,类似于数据库里面PageIndex*PageSize+PageSize期待中??

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Text;
    using System.Text.RegularExpressions;
    namespace cofcms
    {
        public class PagingCollection<T>
        {
            private int pagezise;        public int Pagezise
            {
                get { return pagezise; }
                set { pagezise = value; }
            }
            private int pageindex;        public int Pageindex
            {
                get { return pageindex; }
                set { pageindex = value; }
            }
            private int TotalCount;        public int TotalCount1
            {
                get { return TotalCount; }
                set { TotalCount = value; }
            }
            private int TotalPage=0;        public int TotalPage1
            {
                get { return TotalPage; }
                set { TotalPage = value; }
            }
            private string url;        public string Url
            {
                get { return url; }
                set { url = value; }
            }
            private string urlparms;        public string Urlparms
            {
                get { 
                
                    return urlparms; }
                set { urlparms = value; }
            }
            /// <summary>
            /// 分页数据构造
            /// </summary>
            /// <param name="source"></param>
            /// <param name="pageindex"></param>
            /// <param name="pagezise"></param>
            /// <param name="totalcount"></param>
            /// <param name="url"></param>
            public PagingCollection(int pageindex, int pagezise, int totalcount, string url)
            {
                this.pageindex = pageindex;
                this.pagezise = pagezise;
                TotalCount = totalcount;
                TotalPage = (int)Math.Ceiling(TotalCount / (double)pagezise);
                this.url = url;        }        public PagingCollection(int pageindex, int pagezise, int totalcount, string url,string urlparms)
            {
                this.pageindex = pageindex;
                this.pagezise = pagezise;
                TotalCount = totalcount;
                TotalPage = (int)Math.Ceiling(TotalCount / (double)pagezise);
                this.url = url;
                this.urlparms = urlparms;        }        #region 分页属性 返回分页数据
            public string GetPatePar
            {
                get
                {
                    if (TotalCount1 > 0)
                    {
                        StringBuilder str = new StringBuilder();
                        int startpage = (pageindex - 1) / 10 * 10 + 1;
                        int endpage = (pageindex - 1) / 10 * 10 + 10;
                        int x = endpage > TotalPage ? TotalPage : endpage;
                        str.Append("<div  style=' color:#1E5494;'>共" + TotalPage1 + "页 /  当前第" + pageindex + "页&nbsp;&nbsp;&nbsp;");                    if (HasPreviousPage)
                        {
                            str.Append("<a href=" + url + "?page=1" + GetURLParms + "" + urlparms + ">首页</a>&nbsp;");
                            str.Append("<a href=" + url + "?page=" + (pageindex - 1) + GetURLParms + "" + urlparms + ">上一页</a>");
                        }
                        else
                        {
                            str.Append("<a href=#>首页&nbsp;</a>");
                            str.Append("<a href=#>上一页</a>");
                        }
                        for (int i = startpage; i <= x; i++)
                        {
                            if (i == pageindex)
                            {
                                str.Append(string.Format("<a style='margin-left:3px; margin-right:3px;padding:2px 4px 2px 4px;color:red;border:1px solid #cccccc;background-color:#ffffff; '>" + i + "</a>"));
                            }
                            else
                            {
                                str.Append(string.Format("<a style='margin-left:3px; margin-right:3px;'  href=" + url + "?page=" + i + GetURLParms + "" + urlparms + ">" + i + "</a>"));
                            }
                        }
                        if (HasNextPage)
                        {                        str.Append("<a href=" + url + "?page=" + (pageindex + 1) + GetURLParms + "" + urlparms + ">下一页&nbsp;</a>");
                            str.Append("<a href=" + url + "?page=" + TotalPage + GetURLParms + "" + urlparms + ">尾页</a>");
                        }
                        else
                        {
                            str.Append("<a href=#>下一页&nbsp;</a>");
                            str.Append("<a href=#>尾页</a>");
                        }
                        str.Append("</div>");
                        return str.ToString();
                    }
                    else
                    {
                        return "<font color=red>暂无数据!</font>";
                    }            }
            }
            #endregion
            /// <summary>
            /// url重写
            /// </summary>
            private string GetURLParms
            {
                get
                {
                        string query = HttpContext.Current.Request.Url.Query;
                        query = Regex.Replace(query, @"\?page=\d*", "", RegexOptions.Compiled);
                        return query;
                  
                }
            }
            /// <summary>
            ///判断是否有上一页
            /// </summary>
            public bool HasPreviousPage
            {
                get
                {
                    return (pageindex > 1);
                }
            }
            /// <summary>
            ///判断是否有下一页
            /// </summary>
            public bool HasNextPage
            {
                get
                {
                    return (pageindex < TotalPage);
                }
            }
        }    /// <summary>
        /// 分页数据类
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class PageBean<T>
        {        IList<T> datasource = new List<T>();        public IList<T> Datasource
            {
                get { return datasource; }
                set { datasource = value; }
            }        int pagesum;        public int Pagesum
            {
                get { return pagesum; }
                set { pagesum = value; }
            }
            public PageBean(IList<T> datasource, int pagesum)
            {
                this.datasource = datasource;
                this.pagesum = pagesum;
            }
            public PageBean()
            {
                //
                // TODO: 在此处添加构造函数逻辑
                //
            }
        }
    }
      

  2.   

    /// <summary>
    /// 检索
    /// </summary>
    /// <param name="sender">客户信息</param>
    /// <param name="e">履历信息</param>
    protected void btnSelect_Click(object sender, EventArgs e)
        {
            BindUsers();//客户信息
            PageBind();//履历信息分页
        }
    //分页
    protected void PageBind()
        {
            btnFirst.Visible = true;
            btnPre.Visible = true;
            btnNext.Visible = true;
            btnEnd.Visible = true;
            lbl_page.Visible = true;
            lbl_pages.Visible = true;
            lbl_count.Visible = true;
            int curpage = int.Parse(lbl_page.Text.Trim());//当前页
            PagedDataSource ps = new PagedDataSource();
            viewCRM_HisInfo hisinfo = new viewCRM_HisInfo();
            //履历信息
            if (!string.IsNullOrEmpty(txtc_num.Text.Trim()))
            {
                hisinfo.Where.C_num.Value = txtc_num.Text.Trim();
            }
            if (ddlarea_cd.SelectedValue != "" && ddlarea_cd.SelectedValue != null)
            {
                hisinfo.Where.Area_cd.Value = ddlarea_cd.SelectedItem.Text;
            }
            hisinfo.Query.Load();
            ps.DataSource = hisinfo.DefaultView;  //绑定分页信息
            ps.AllowPaging = true; //是否分页
            ps.PageSize = 3;   //每页数量
            ps.CurrentPageIndex = curpage - 1;  //当前页
            if (curpage == 1)    //当当前页是1时,第一页和上一页按钮不可用
            {
                btnFirst.Enabled = false;
                btnPre.Enabled = false;
                btnNext.Enabled = true;
                btnEnd.Enabled = true;
            }
            else
            {
                btnFirst.Enabled = true;
                btnPre.Enabled = true;
            }
            if (curpage == ps.PageCount)//当当前页是最后一页时,下一页和最后一页按钮不可用
            {
                btnNext.Enabled = false;
                btnEnd.Enabled = false;
                btnFirst.Enabled = true;
                btnPre.Enabled = true;
            }
            else
            {
                btnNext.Enabled = true;
                btnEnd.Enabled = true;
            }
            lbl_pages.Text = Convert.ToString(ps.PageCount);//总页数
            lbl_count.Text = ps.DataSourceCount.ToString();//总记录数
            DataList1.DataSource = ps;           //绑定datalist数据
            DataList1.DataKeyField = "Id";
            DataList1.DataBind();
        }
        //第一页
        protected void btnFirst_Click(object sender, EventArgs e)
        {
            lbl_page.Text = "1";
            PageBind();
        }
        //上一页
        protected void btnPre_Click(object sender, EventArgs e)
        {
            lbl_page.Text = Convert.ToString(Convert.ToInt32(lbl_page.Text) - 1);
            PageBind();
        }
        //下一页
        protected void btnNext_Click(object sender, EventArgs e)
        {
            lbl_page.Text = Convert.ToString(Convert.ToInt32(lbl_page.Text) + 1);
            PageBind();
        }
        //最后一页
        protected void btnEnd_Click(object sender, EventArgs e)
        {
            lbl_page.Text = lbl_pages.Text;
            PageBind();    }
      

  3.   

    现在能提供的参数是
    PageCount:当前有多少页
    CurrentPage:当前第几页
    DispPager:显示多少个页码显示效果请参照图片
      

  4.   

    用aspnetpager吧
    http://www.webdiyer.com/controls/aspnetpager
    用起来很简单,分页存储过程也帮你生成。
      

  5.   

    这个应该是一大堆IF ELSE吧
      

  6.   

    仿19楼分页控件 一个url静态化的分页控件
    http://www.xunxt.com/forum-viewthread-tid-83-fromuid-1.html
      

  7.   


    曾经我也以为应该是一大堆的if else,
    后来发现还是“PageIndex*PageSize——PageIndex*PageSize+PageSize”更美好
      

  8.   

    首先建议LZ用存储过程吧因为防止SQL注入以及一些7788的东西,其实分页的关键点还是那个SQL语句:select r_1,r_2 from (select row_number() over (order by r_ID) as r_row,r_name from table_1) as table_2 where r_row>= n_1 and r_row<=n_2 这个存储过程的参数就是n_1,n_2。楼主看看行得通不,算法就看你每页显示多少条数据了咯
      

  9.   

    自定义样式也比较容易的,aspnetpager网上有很多种样式风格:拍拍、淘宝、迅雷...http://www.baidu.com/s?wd=aspnetpager+%D1%F9%CA%BD&ch=&tn=17gameyes&bar=&oq=aspnetpager&rsp=1&f=3&sugT=3781
      

  10.   

    AspNetPager
      

  11.   

    http://hi.baidu.com/roleya/blog/item/6c3fe12429bcfe3a8644f926.html转一个我09年做的页码分页,里面有一小段算得上是算法的方法吧。