任务目标:学习数据库数据分页显示的方法
任务描述:在前面任务的基础上,考虑分页超过10页的情况。若分页超过10页,则只显示当前的10页数字,其他页数隐藏,在点击>>和<<链接时再出现。
例如共有16页,当前显示第1页,则显示
1 2 3 4 5 6 7 8 9 >>
共有16页,当前显示第2页,则显示
1 2 3 4 5 6 7 8 9 >>
共有16页,当前显示第3页,则显示
1 2 3 4 5 6 7 8 9 >>
共有16页,当前显示第4页,则显示
1 2 3 4 5 6 7 8 9 >>
共有16页,当前显示第5页,则显示
1 2 3 4 5 6 7 8 9 >>
共有16页,当前显示第6页,则显示
<< 2 3 4 5 6 7 8 9 10 >>
共有16页,当前显示第7页,则显示
<< 3 4 5 6 7 8 9 10 11 >>
共有16页,当前显示第8页,则显示
<< 4 5 6 7 8 9 10 11 12 >>
共有16页,当前显示第9页,则显示
<< 5 6 7 8 9 10 11 12 13 >>
共有16页,当前显示第10页,则显示
<< 6 7 8 9 10 11 12 13 14 >>
共有16页,当前显示第11页,则显示
<< 6 7 8 9 10 11 12 13 14 15 >>
共有16页,当前显示第12页,则显示
<< 8 9 10 11 12 13 14 15 16
共有16页,当前显示第13页,则显示
<< 8 9 10 11 12 13 14 15 16
共有16页,当前显示第14页,则显示
<< 8 9 10 11 12 13 14 15 16
共有16页,当前显示第15页,则显示
<< 8 9 10 11 12 13 14 15 16
共有16页,当前显示第16页,则显示
<< 8 9 10 11 12 13 14 15 16
当前所在页码切换时,如果当前页码之前有超过4个页码,则显示当前页码前4个页码,并在最前显示<<的链接;如果当前页码之后有超过4个页码,则在显示当前页码之后的4个页码,并在最后显示>>的链接。
当点击>>链接时,将分页切换到当前最大分页的后一页,
当前页码:1 2 3 4 5 6 7 8 9 >> 点击>>链接时,变化为:<< 6 7 8 9 10 11 12 13 14 >>
当前页码:1 2 3 4 5 6 7 8 9 >> 点击>>链接时,变化为:<< 6 7 8 9 10 11 12 13 14 >>
当前页码:<< 6 7 8 9 10 11 12 13 14 >> 点击>>链接时,变化为:<< 8 9 10 11 12 13 14 15 16
当点击<<链接时,将分页切换到当前最小分页的前一页,
当前页码:<< 8 9 10 11 12 13 14 15 16 点击<<链接时,变化为:<< 3 4 5 6 7 8 9 10 11 >>
当前页码:<< 6 7 8 9 10 11 12 13 14 15 >> 点击<<链接时,变化为:1 2 3 4 5 6 7 8 9 >>
当前页码:<< 2 3 4 5 6 7 8 9 10 >> 点击<<链接时,变化为:1 2 3 4 5 6 7 8 9 >>

解决方案 »

  1.   

    默认的分页或者 自定义分页
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
               }
        public void bind()
        {
            SqlConnection cn = new SqlConnection("server=.;database=pubs;uid=sa;pwd=sa");
            cn.Open();
            SqlDataAdapter da = new SqlDataAdapter("select * from authors", cn);
            DataSet ds = new DataSet();
            da.Fill(ds);
            cn.Close();
            GridView1.DataSource = ds;
            GridView1.AllowPaging = true;
            GridView1.PageSize = 5;
            GridView1.DataBind();
            if (GridView1.PageIndex == 0)
            {
                Button1.Enabled = false;
                Button2.Enabled = false;
            }
            else
            {
                Button1.Enabled = true;
                Button2.Enabled = true;
            }
            if (GridView1.PageIndex == GridView1.PageCount - 1)
            {
                Button3.Enabled = false;
                Button4.Enabled = false;
            }
            else
            {
                Button3.Enabled = true;
                Button4.Enabled = true;
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
          
            GridView1.PageIndex = 0;
            bind();
        }
        protected void Button3_Click(object sender, EventArgs e)
        {
            GridView1.PageIndex = GridView1.PageIndex + 1;
            bind();
        }
        protected void Button4_Click(object sender, EventArgs e)
        {
            GridView1.PageIndex = GridView1.PageCount - 1;
            bind();
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            GridView1.PageIndex = GridView1.PageIndex - 1;
            bind();
        }
    }
      

  2.   

    aspnetpager可以满足你的要求,简单的操作就可以了,不要具体的操作。
      

  3.   


            protected void lnkbtnFrist_Click(object sender, EventArgs e)
            {
                this.GridViewShow.PageIndex = 0;
                GridViewShow.DataBind();
            }
            protected void lnkbtnPre_Click(object sender, EventArgs e)
            {
                if (this.GridViewShow.PageIndex > 0)
                {
                    this.GridViewShow.PageIndex = this.GridViewShow.PageIndex - 1;
                    GridViewShow.DataBind();
                }
            }
            protected void lnkbtnNext_Click(object sender, EventArgs e)
            {
                if (this.GridViewShow.PageIndex < this.GridViewShow.PageCount)
                {
                    this.GridViewShow.PageIndex = this.GridViewShow.PageIndex + 1;
                    GridViewShow.DataBind();
                }
            }
            protected void lnkbtnLast_Click(object sender, EventArgs e)
            {
                this.GridViewShow.PageIndex = this.GridViewShow.PageCount;
                GridViewShow.DataBind();        }
            protected void GridViewShow_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                this.lblCurrentPage.Text = string.Format("当前第{0}页/总共{1}页", this.GridViewShow.PageIndex + 1, this.GridViewShow.PageCount);
                //遍历所有行设置边框样式
                foreach (TableCell tc in e.Row.Cells)
                {
                    tc.Attributes["style"] = "border-color:Black";
                }
                //用索引来取得编号
                if (e.Row.RowIndex != -1)
                {
                    int id = GridViewShow.PageIndex * GridViewShow.PageSize + e.Row.RowIndex + 1;
                    e.Row.Cells[0].Text = id.ToString();
                }
                if (e.Row.RowType == DataControlRowType.Footer) //这句必须写,否则空白行会出现在不正确的位置
                {                //当Gridview行不足n时,填充空白行
                    for (int i = 0; i < 20 - GridViewShow.Rows.Count; i++)
                    {
                        int rowIndex = GridViewShow.Rows.Count + i + 1;
                        GridViewRow row = new GridViewRow(rowIndex, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
                        for (int j = 0; j < GridViewShow.Columns.Count; j++)
                        {
                            TableCell cell = new TableCell();
                            cell.Text = "&nbsp;";
                            row.Controls.Add(cell);
                            row.Attributes.Add("BorderColor ", "#d2d2d2");
                        }                    GridViewShow.Controls[0].Controls.AddAt(rowIndex, row);                }
                }
            }
        }
      

  4.   

    去下个分页控件 ASPNETPAGAER
      

  5.   

    好吧,用Aspnetpager,问题是怎么用呢?我不会啊
      

  6.   

    我的主页上有详细的示例和帮助文档:http://www.webdiyer.com/controls/aspnetpager
    谢谢楼上各位的大力推荐!
      

  7.   

    lz真强.用免费的好控件还想来个源码啊.不看文档不看demo的?
      

  8.   

    http://www.webdiyer.com/controls/aspnetpager
    这里就是很简单的例子,但是,也要根据自己的需求进行操作。