zoukankan      html  css  js  c++  java
  • 【ASP.NET】存储过程分页实例

    存错过程代码:

      

     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="50px;">
     6                             id
     7                         </td>
     8                         <td style="150px;">
     9                             姓名
    10                         </td>
    11                         <td style="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>

    后台逻辑代码如下:

    Page_Load
     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         }
    GO按钮事件
     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         }

    写完这个小程序发现代码量真的很大,其实好多核心代码都是复制粘贴的,可能还可以继续加以改进,先分享一下吧!以前用控件分页感觉很爽,一句代码不用写。但是只是知其然不知其所以然。今天算是对分页有了另一种理解!看别人的分页存储过程写了好长一堆代码,本人表示压力很大,都看不懂。今天写一个简单的!以后有时间再研究大牛们的代码吧!

        ——附:代码经过测试,没有一点问题!

  • 相关阅读:
    BestCoder6 1002 Goffi and Squary Partition(hdu 4982) 解题报告
    codeforces 31C Schedule 解题报告
    codeforces 462C Appleman and Toastman 解题报告
    codeforces 460C. Present 解题报告
    BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告
    BestCoder3 1001 Task schedule(hdu 4907) 解题报告
    poj 1195 Mobile phones 解题报告
    二维树状数组 探索进行中
    codeforces 460B Little Dima and Equation 解题报告
    通过Sql语句控制SQLite数据库增删改查
  • 原文地址:https://www.cnblogs.com/ngnetboy/p/2612917.html
Copyright © 2011-2022 走看看