存錯過程代碼:
1 -- ============================================= 2 -- Author: netboy 3 -- Create date: 2012年7月27日 4 -- Description: 存儲過程分頁 5 -- ============================================= 6 CREATE PROCEDURE [dbo].[getdatabypageindex] 7 @pageindex int, 8 @pagecount int output 9 AS 10 BEGIN 11 declare @sql nvarchar(1000) 12 declare @pagec int 13 set @sql='select top 10 * from T_User where id not in (select top ' +CAST(@pageindex*10 as nvarchar(10))+' id from T_user) ' 14 15 select @pagec = COUNT(*) from T_User 16 17 set @pagecount = (@pagec+9)/10 18 19 exec (@sql) 20 END
net小伙用的是ASP.NET寫的demo:前台界面如下:
net小伙用的是repeater控件綁定的數據,具體前台代碼如下:

1 <asp:Repeater ID="Repeater1" runat="server"> 2 <HeaderTemplate> 3 <table> 4 <tr> 5 <td style="width:50px;"> 6 id 7 </td> 8 <td style="width:150px;"> 9 姓名 10 </td> 11 <td style="width:100px;"> 12 年齡 13 </td> 14 </tr> 15 16 </HeaderTemplate> 17 <ItemTemplate> 18 <tr> 19 <td style=" color:Green;"> 20 <%#Eval("id")%> 21 </td> 22 <td style="color:Blue;"> 23 <%#Eval("UserName")%> 24 </td> 25 <td style="color:Red;"> 26 <%#Eval("Age")%> 27 </td> 28 </tr> 29 </ItemTemplate> 30 <FooterTemplate></table></FooterTemplate> 31 </asp:Repeater> 32 33 <table> 34 <tr> 35 <td> 36 <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click">首頁</asp:LinkButton></td> 37 <td> 38 <asp:TextBox ID="TextBox1" runat="server" Width="29px"></asp:TextBox></td> 39 40 <td> 41 <asp:LinkButton ID="LinkButton5" runat="server" onclick="LinkButton5_Click">GO</asp:LinkButton></td> 42 <td> 43 <asp:Label ID="Label1" runat="server" Text="第"></asp:Label></td> 44 <td> 45 <asp:Label ID="index" runat="server" Text="1"></asp:Label></td> 46 <td> 47 <asp:Label ID="Label3" runat="server" Text="頁"></asp:Label></td> 48 <td> 49 <asp:Label ID="Label2" runat="server" Text="共"></asp:Label></td> 50 <td> 51 <asp:Label ID="labcount" runat="server" Text=""></asp:Label></td> 52 <td> 53 <asp:Label ID="Label5" runat="server" Text="頁"></asp:Label></td> 54 <td> 55 <asp:LinkButton ID="LinkButton2" runat="server" onclick="LinkButton2_Click">上一頁</asp:LinkButton></td> 56 <td> 57 <asp:LinkButton ID="LinkButton3" runat="server" onclick="LinkButton3_Click">下一頁</asp:LinkButton></td> 58 <td> 59 <asp:LinkButton ID="LinkButton4" runat="server" onclick="LinkButton4_Click">尾頁</asp:LinkButton></td> 60 </tr> 61 </table>
后台邏輯代碼如下:

1 protected void Page_Load(object sender, EventArgs e) 2 { 3 if (!IsPostBack) 4 { 5 this.shuju(); 6 if (index.Text == "1") 7 { 8 LinkButton1.Enabled = false; 9 LinkButton2.Enabled = false; 10 } 11 if (index.Text == labcount.Text) 12 { 13 LinkButton3.Enabled = false; 14 LinkButton4.Enabled = false; 15 } 16 } 17 }

1 public void shuju() //初始化數據 2 { 3 using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["data"].ConnectionString)) 4 { 5 SqlDataAdapter da = new SqlDataAdapter("getdatabypageindex", con); 6 da.SelectCommand.CommandType = CommandType.StoredProcedure; 7 8 da.SelectCommand.Parameters.Add(new SqlParameter("@pageindex",SqlDbType.Int)); 9 da.SelectCommand.Parameters["@pageindex"].Value = 0; 10 11 da.SelectCommand.Parameters.Add(new SqlParameter("@pagecount", SqlDbType.Int)); 12 da.SelectCommand.Parameters["@pagecount"].Direction = ParameterDirection.Output; 13 DataSet ds = new DataSet(); 14 da.Fill(ds); 15 16 labcount.Text = da.SelectCommand.Parameters["@pagecount"].Value.ToString(); //返回總頁數 17 this.Repeater1.DataSource = ds; 18 this.Repeater1.DataBind(); 19 } 20 }

1 protected void LinkButton1_Click(object sender, EventArgs e) 2 { 3 using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["data"].ConnectionString)) 4 { 5 SqlDataAdapter da = new SqlDataAdapter("getdatabypageindex", con); 6 da.SelectCommand.CommandType = CommandType.StoredProcedure; 7 da.SelectCommand.Parameters.Add(new SqlParameter("@pageindex", SqlDbType.Int)); 8 da.SelectCommand.Parameters["@pageindex"].Value = 0; 9 da.SelectCommand.Parameters.Add(new SqlParameter("@pagecount", SqlDbType.Int)); 10 da.SelectCommand.Parameters["@pagecount"].Direction = ParameterDirection.Output; 11 DataSet ds = new DataSet(); 12 da.Fill(ds); 13 this.Repeater1.DataSource = ds; 14 this.Repeater1.DataBind(); 15 } 16 17 index.Text = "1"; 18 19 //把首頁和上一頁設置為不可操作 20 LinkButton1.Enabled = false; 21 LinkButton2.Enabled = false; 22 }

1 protected void LinkButton5_Click(object sender, EventArgs e) 2 { 3 using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["data"].ConnectionString)) 4 { 5 string pageindex = TextBox1.Text; 6 int intpageindex = Convert.ToInt32(pageindex); 7 8 int pagecount = Convert.ToInt32(labcount.Text); 9 if (intpageindex > pagecount) //判斷,如果輸入的數字大於總頁數就返回 10 { 11 return; 12 } 13 else 14 { 15 SqlDataAdapter da = new SqlDataAdapter("getdatabypageindex", con); 16 da.SelectCommand.CommandType = CommandType.StoredProcedure; 17 18 da.SelectCommand.Parameters.Add(new SqlParameter("@pageindex", SqlDbType.Int)); 19 da.SelectCommand.Parameters["@pageindex"].Value = intpageindex - 1; 20 21 da.SelectCommand.Parameters.Add(new SqlParameter("@pagecount", SqlDbType.Int)); 22 da.SelectCommand.Parameters["@pagecount"].Direction = ParameterDirection.Output; 23 DataSet ds = new DataSet(); 24 da.Fill(ds); 25 this.Repeater1.DataSource = ds; 26 this.Repeater1.DataBind(); 27 if (TextBox1.Text == "1") //判斷如果輸入1,首頁和上一頁不可操作,但是尾頁和下一頁可以操作 28 { 29 LinkButton1.Enabled = false; 30 LinkButton2.Enabled = false; 31 32 LinkButton3.Enabled = true; 33 LinkButton4.Enabled = true; 34 } 35 else if (TextBox1.Text == labcount.Text) //判斷如果輸入的數等於總頁數,首頁和第一頁可以操作,但是尾頁可下一頁不可操作 36 { 37 LinkButton3.Enabled = false; 38 LinkButton4.Enabled = false; 39 40 LinkButton1.Enabled = true; 41 LinkButton2.Enabled = true; 42 } 43 else //如果是其他情況,首頁第一頁,尾頁和下一頁都可操作 44 { 45 LinkButton3.Enabled = true; 46 LinkButton4.Enabled = true; 47 48 LinkButton1.Enabled = true; 49 LinkButton2.Enabled = true; 50 } 51 } 52 } 53 index.Text = TextBox1.Text; //設置當前頁數等於輸入的頁數 54 }

1 protected void LinkButton2_Click(object sender, EventArgs e) 2 { 3 using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["data"].ConnectionString)) 4 { 5 string pageindex = index.Text; 6 int intpageindex = Convert.ToInt32(pageindex); 7 8 SqlDataAdapter da = new SqlDataAdapter("getdatabypageindex", con); 9 da.SelectCommand.CommandType = CommandType.StoredProcedure; 10 da.SelectCommand.Parameters.Add(new SqlParameter("@pageindex", SqlDbType.Int)); 11 da.SelectCommand.Parameters["@pageindex"].Value = intpageindex - 2; 12 13 da.SelectCommand.Parameters.Add(new SqlParameter("@pagecount", SqlDbType.Int)); 14 da.SelectCommand.Parameters["@pagecount"].Direction = ParameterDirection.Output; 15 DataSet ds = new DataSet(); 16 da.Fill(ds); 17 18 labcount.Text = da.SelectCommand.Parameters["@pagecount"].Value.ToString(); 19 this.Repeater1.DataSource = ds; 20 this.Repeater1.DataBind(); 21 } 22 int intindex = Convert.ToInt32(index.Text); 23 index.Text = (intindex - 1).ToString(); 24 25 LinkButton3.Enabled = true; 26 LinkButton4.Enabled = true; 27 28 if (index.Text == "1") 29 { 30 LinkButton1.Enabled = false; 31 LinkButton2.Enabled = false; 32 } 33 34 }

1 protected void LinkButton3_Click(object sender, EventArgs e) 2 { 3 using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["data"].ConnectionString)) 4 { 5 string pageindex = index.Text; 6 int intpageindex = Convert.ToInt32(pageindex); 7 8 SqlDataAdapter da = new SqlDataAdapter("getdatabypageindex", con); 9 da.SelectCommand.CommandType = CommandType.StoredProcedure; 10 da.SelectCommand.Parameters.Add(new SqlParameter("@pageindex", SqlDbType.Int)); 11 da.SelectCommand.Parameters["@pageindex"].Value = intpageindex; 12 13 da.SelectCommand.Parameters.Add(new SqlParameter("@pagecount", SqlDbType.Int)); 14 da.SelectCommand.Parameters["@pagecount"].Direction = ParameterDirection.Output; 15 DataSet ds = new DataSet(); 16 da.Fill(ds); 17 18 labcount.Text = da.SelectCommand.Parameters["@pagecount"].Value.ToString(); 19 this.Repeater1.DataSource = ds; 20 this.Repeater1.DataBind(); 21 } 22 int intindex = Convert.ToInt32(index.Text); 23 index.Text = (intindex + 1).ToString(); 24 25 LinkButton1.Enabled = true; 26 LinkButton2.Enabled = true; 27 28 if (index.Text == labcount.Text) 29 { 30 LinkButton3.Enabled = false; 31 LinkButton4.Enabled = false; 32 } 33 }

1 protected void LinkButton4_Click(object sender, EventArgs e) 2 { 3 using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["data"].ConnectionString)) 4 { 5 int intindex = Convert.ToInt32(labcount.Text); 6 7 SqlDataAdapter da = new SqlDataAdapter("getdatabypageindex", con); 8 da.SelectCommand.CommandType = CommandType.StoredProcedure; 9 da.SelectCommand.Parameters.Add(new SqlParameter("@pageindex", SqlDbType.Int)); 10 da.SelectCommand.Parameters["@pageindex"].Value = intindex - 1; 11 da.SelectCommand.Parameters.Add(new SqlParameter("@pagecount", SqlDbType.Int)); 12 da.SelectCommand.Parameters["@pagecount"].Direction = ParameterDirection.Output; 13 DataSet ds = new DataSet(); 14 da.Fill(ds); 15 this.Repeater1.DataSource = ds; 16 this.Repeater1.DataBind(); 17 } 18 index.Text = labcount.Text; 19 20 21 LinkButton1.Enabled = true; 22 LinkButton2.Enabled = true; 23 24 LinkButton3.Enabled = false; 25 LinkButton4.Enabled = false; 26 }
寫完這個小程序發現代碼量真的很大,其實好多核心代碼都是復制粘貼的,可能還可以繼續加以改進,先分享一下吧!以前用控件分頁感覺很爽,一句代碼不用寫。但是只是知其然不知其所以然。今天算是對分頁有了另一種理解!看別人的分頁存儲過程寫了好長一堆代碼,本人表示壓力很大,都看不懂。今天寫一個簡單的!以后有時間再研究大牛們的代碼吧!
——附:代碼經過測試,沒有一點問題!