任务目标:学习数据库数据分页显示的方法
任务描述:在前面任务的基础上,考虑分页超过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 >>
任务描述:在前面任务的基础上,考虑分页超过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 >>
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();
}
}
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 = " ";
row.Controls.Add(cell);
row.Attributes.Add("BorderColor ", "#d2d2d2");
} GridViewShow.Controls[0].Controls.AddAt(rowIndex, row); }
}
}
}
谢谢楼上各位的大力推荐!
这里就是很简单的例子,但是,也要根据自己的需求进行操作。