转自 网页博客 前台HTML代码: <table id="Table2" border="0" cellpadding="1" cellspacing="1" width="540"> <tr> <td align="right" style="vertical-align: top; text-align: center" mce_style="vertical-align: top; text-align: center"> <asp:LinkButton ID="FirstLB" runat="server" CommandName="first" OnCommand="LinkButton_Click">第一页</asp:LinkButton> <asp:LinkButton ID="PreviousLB" runat="server" CommandName="prev" OnCommand="LinkButton_Click">上一页</asp:LinkButton> <asp:LinkButton ID="NextLB" runat="server" CommandName="next" OnCommand="LinkButton_Click">下一页</asp:LinkButton> <asp:LinkButton ID="EndLB" runat="server" CommandName="end" OnCommand="LinkButton_Click">最后一页</asp:LinkButton> 总<asp:Label ID="TotalLbl" runat="server"></asp:Label>页 当前第<asp:Label ID="CurrentLbl" runat="server"></asp:Label>页 <asp:LinkButton ID="JumpLB" runat="server" CommandName="jump" OnCommand="LinkButton_Click">跳到</asp:LinkButton>第 <asp:TextBox ID="TextBox2" runat="server" Width="90px"></asp:TextBox> 页</td> </tr> </table> 效果: 后台代码: using System; using System.Data; using System.Configuration; using System.Collections; using System.Data.SqlClient; 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; public partial class CarDiscuss : System.Web.UI.Page { int CurrentPage;//当前页数 int PageSize; //每页条数 int PageCount; //总页数 int RecordCount;//总条数 protected void Page_Load(object sender, EventArgs e) { PageSize = 10;//每页10条记录 if (!Page.IsPostBack) { CurrentPage = 0;//当前页习惯设为0 ViewState["PageIndex"] = 0;//页索引也设为0 //计算总共有多少记录 RecordCount = CalculateRecord(); //计算总共有多少页 if (RecordCount % PageSize == 0) { PageCount = RecordCount / PageSize; } else { PageCount = RecordCount / PageSize + 1; } this.TotalLbl.Text = PageCount.ToString();//显示总页数 ViewState["PageCount"] = PageCount;//会话session 对整个 application 有效 ,而视图状态 viewstate相当于某个页面的 session this.DataListBind();//不可以放在初始化条件之前就绑定,那样的话,如果仅有一页的数据,“下一页”页仍然显示 } } //计算总共有多少条记录 private int CalculateRecord() { try { int recordCount; SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Car;user id =sa;password=sa");//数据库使用Northwind; con.Open(); string sql = "SELECT * FROM [CarDiscuss] ORDER BY [CDDate] DESC, [CDLookNumber] DESC"; SqlCommand cmd = new SqlCommand(sql, con); //SqlDataReader sdr = cmd.ExecuteReader(); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); recordCount = ds.Tables[0].Rows.Count; //if (recordCount != 0) //{ // //recordCount = Int32.Parse(sdr["count"].ToString()); //} //else //{ // recordCount = 0; //} //sdr.Close(); con.Close(); return recordCount; } catch (Exception ex) { throw new Exception(ex.Message); } } //将数据绑定到Datalist控件 public void DataListBind() { try { int StartIndex = CurrentPage * PageSize;//设定导入的起终地址 string sql = "SELECT * FROM [CarDiscuss] ORDER BY [CDDate] DESC, [CDLookNumber] DESC"; DataSet ds = new DataSet(); SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Car;user id =sa;password=sa"); SqlCommand com = new SqlCommand(sql, con); SqlDataAdapter sda = new SqlDataAdapter(com); sda.Fill(ds, StartIndex, PageSize, "CarDiscuss");//这是sda.Fill方法的第一次重载,里面的变量分别是数据集DataSet ,开始记录数StartRecord,最大的记录数MaxRecord,数据表名TableName this.DataList1.DataSource = ds.Tables["CarDiscuss"]; this.DataList1.DataBind(); this.PreviousLB.Enabled = true; this.NextLB.Enabled = true; if (CurrentPage == (PageCount - 1)) this.NextLB.Enabled = false;//当为最后一页时,下一页链接按钮不可用 if (CurrentPage == 0) this.PreviousLB.Enabled = false;//当为第一页时,上一页按钮不可用 this.CurrentLbl.Text = (CurrentPage + 1).ToString();//当前页数 } catch (Exception ex) { throw new Exception(ex.Message); } } public void LinkButton_Click(Object sender, CommandEventArgs e)//自己编写的按钮点击事件 { CurrentPage = (int)ViewState["PageIndex"];//获得当前页索引 PageCount = (int)ViewState["PageCount"];//获得总页数 string cmd = e.CommandName; //判断cmd,以判定翻页方向 switch (cmd) { case "prev"://上一页 if (CurrentPage > 0) CurrentPage--; break; case "next": if (CurrentPage < (PageCount - 1)) CurrentPage++;//下一页 break; case "first"://第一页 CurrentPage = 0; break; case "end"://最后一页 CurrentPage = PageCount - 1; break; case "jump"://跳转到第几页 if (this.TextBox2.Text.Trim() == "" || Int32.Parse(this.TextBox2.Text.Trim()) > PageCount)//如果输入数字为空或超出范围则返回 { return; } else { CurrentPage = Int32.Parse(this.TextBox2.Text.ToString()) - 1; break; } } ViewState["PageIndex"] = CurrentPage;//获得当前页 this.DataListBind();//重新将DataList绑定到数据库 } }