三层+存储分页(无序号)

存储过程:
ALTER   PROCEDURE   [dbo] . [sp_product]
@TableList   Varchar (   200 )= '*'   , -- 搜索表的字段   , 比如:’ id   datatime   job ‘,用逗号隔开
@TableName   Varchar (   30 ),   -- 搜索的表名
@SelectWhere   Varchar (   500 )= ''   , -- 搜索条件,这里不用写   where ,比如: job=   teacher   and class='2'
@SelectOrderId   Varchar (   20 ), --   表主键字段名。比如:   id
@SelectOrder   Varchar (   200 )= ''   ,   --   排序,可以使用多字段排序但主键字段必需在最前面也可以不写,比如:   order by class asc
@intPageNo   int =   1 ,   -- 页号
@intPageSize   int =   10   , --   每页显示数
@RecordCount   int   OUTPUT     --   总记录数 ( 存储过程输出参数   )
as   
declare   @TmpSelect        NVarchar (   600 )
declare   @Tmp       NVarchar   ( 600 )
set   nocount   on --   关闭计数

set   @TmpSelect   =   'select @RecordCount = count(*) from ' + @TableName   + ' ' + @SelectWhere

execute   sp_executesql
@TmpSelect ,       -- 执行上面的 sql 语句
N '@RecordCount int OUTPUT'   ,      --   执行输出数据的   sql 语句, output   出总记录数
@RecordCount    OUTPUT

    if   ( @RecordCount   =   0 )       -- 如果没有贴子,则返回零
         return   0
      
     /* 判断页数是否正确   */
    if   ( @intPageNo   -   1 )   *   @intPageSize   >   @RecordCount     -- 页号大于总记录数,返回错误
       return   (-   1 )
set   nocount   off --   打开计数
if   @SelectWhere   !=   ''
begin
set   @TmpSelect   =   'select top ' +   str ( @intPageSize   )+ ' ' +   @TableList + ' from ' + @TableName +   ' where ' + @SelectOrderId   + ' not in(select top ' + str ((   @intPageNo - 1   )* @intPageSize )+   ' ' + @SelectOrderId   + ' from ' + @TableName +   ' ' + @SelectWhere   + ' ' +   @SelectOrder + ') and '   + @SelectWhere   +   ' ' + @SelectOrder
end
else
begin
set   @TmpSelect   =   'select top ' +   str ( @intPageSize   )+ ' ' +   @TableList + ' from ' + @TableName +   ' where ' + @SelectOrderId   + ' not in(select top ' + str ((   @intPageNo - 1   )* @intPageSize )+   ' ' + @SelectOrderId   + ' from ' + @TableName +   ' ' + @SelectOrder   + ') ' +   @SelectOrder
end
execute   sp_executesql   @TmpSelect
return ( @@rowcount   )

DAO层:
           public   DataTable   PageDB( int   pagesize,   int   pageno, out   int   RecordCount)
        {
              DataTable   dt =   new   DataTable ();
              string   cmdText =   "sp_product"   ;
              SqlParameter [] paras =   new   SqlParameter []{
             // new SqlParameter("@TableList",SqlDbType.VarChar),
              new   SqlParameter   ( "@TableName" ,   SqlDbType .VarChar ),
              new   SqlParameter   ( "@SelectOrderId" , SqlDbType   .VarChar ),
              new   SqlParameter   ( "@SelectOrder" , SqlDbType   .VarChar ),
              new   SqlParameter   ( "@intPageNo" ,   SqlDbType .Int ),
              new   SqlParameter   ( "@intPageSize" , SqlDbType   .Int ),
              new   SqlParameter   ( "@RecordCount" , SqlDbType   .Int),
            //  new SqlParameter("@strwhere",SqlDbType.VarChar )
            };
            paras[0].Value =   "product" ;
            paras[1].Value =   "Pro_id" ;
            paras[2].Value =   "" ;
            paras[3].Value = pageno;
            paras[4].Value = pagesize;
            paras[5].Direction =   ParameterDirection .Output;
            dt = sqlhelper.ExecuteQuery(cmdText, paras,   CommandType   .StoredProcedure);
            RecordCount =   Convert .ToInt32( paras[5].Value.ToString());
              return   dt;
        }

BLL:
          public   DataTable   PageDB( int   pagesize,   int   pageno, out   int   RecordCount)
        {
              return   conntest.PageDB(pagesize, pageno, out   RecordCount);
        }

.aspx.cs:
      protected   void   Page_Load( object   sender,   EventArgs   e) //, strwhere
    {
          this .bind();
    }
      protected   void   link_Click( object   sender,   EventArgs   e)
    {
          int   page =   Convert   .ToInt32(txtlink.Text);
          int   maxpage =   Convert   .ToInt32(lbpage.Text);
          if   (1 <= page && page <= maxpage)
        {
            Response.Redirect(   "ConnTest.aspx?CurrentPage="   + page +   "" );
        }
          else   { Page.ClientScript.RegisterStartupScript(GetType(),   "massage" ,   "<script>alert('   请输入正确的页码!   ')</script>" ); }
    }
      public   void   bind()
    {
          int   recordcount;
          int   pageNo = 1;
          int   pageSize = 10;
          if   (Request.QueryString[ "CurrentPage"   ] ==   null )
        {
            pageNo = 1;
        }
          else
        {
            pageNo =   Int32 .Parse(Request.QueryString[ "CurrentPage" ]);
        }
          DataTable   dt =   new   ConnTestManager ().PageDB(pageSize, pageNo,   out   recordcount);

        GridView1.DataSource = dt;
        GridView1.DataBind();

        lbRecord.Text = recordcount.ToString();
        lbRow.Text = pageNo.ToString();

          int   sumPage = recordcount / pageSize;
          if   (recordcount % pageSize > 0)
        {
            sumPage = sumPage + 1;
        }
        lbpage.Text = sumPage.ToString();   // 总页数

          if   (pageNo > 1)
        {
            hylfirst.NavigateUrl =   "ConnTest.aspx?CurrentPage=1"   ;
            hylprev.NavigateUrl =   string .Concat( "ConnTest.aspx?CurrentPage="   ,   "" , pageNo - 1);
        }
          else
        {
            hylprev.NavigateUrl =   "" ;
            hylfirst.NavigateUrl =   "" ;
            hylfirst.Enabled =   false ;
            hylprev.Enabled =   false ;
        }
          if   (pageNo < recordcount)
        {
            hylend.NavigateUrl =   string .Concat( "ConnTest.aspx?CurrentPage="   ,   "" , recordcount);
            hylnext.NavigateUrl =   string .Concat( "ConnTest.aspx?CurrentPage="   ,   "" , pageNo + 1);
        }
          else
        {
            hylnext.NavigateUrl =   "" ;
            hylend.NavigateUrl =   "" ;
            hylend.Enabled =   false ;
            hylnext.Enabled =   false ;
        }
    }

.aspx,此处只列一条记录
       < div >
          < asp :   GridView   ID   ="GridView1"   runat   ="server"   AutoGenerateColumns   ="false">
              < Columns >
                   < asp :   TemplateField   HeaderText   =" 排序 ">
                      < ItemTemplate >
                        <% # Eval(   "ProOrder" )%> </ ItemTemplate   >
                  </ asp :   TemplateField >
              </ Columns >
          </ asp :   GridView >
          < asp :   HyperLink   ID   ="hylfirst"   runat   ="server"> 首页 </   asp : HyperLink   >
          < asp :   HyperLink   ID   ="hylprev"   runat   ="server"> 上一页 </ asp   : HyperLink >
          < asp :   HyperLink   ID   ="hylnext"   runat   ="server"> 下一页 </ asp   : HyperLink >
          < asp :   HyperLink   ID   ="hylend"   runat   ="server"> 尾页 </   asp : HyperLink   >
          < asp   : Label   ID ="lbRow"   runat ="server"   Text ="Label"></ asp :   Label > 页,   <   asp : Label   ID ="lbpage"
              runat ="server"   Text ="Label"></ asp :   Label > 页,共   < asp :   Label   ID ="lbRecord"   runat ="server"
                  Text ="Label"></ asp :   Label > 条记录,转到   < asp :   TextBox   ID   ="txtlink"   runat ="server"   Width ="29px"></ asp :   TextBox >
          < asp   : LinkButton   ID ="link"   runat ="server"   OnClick ="link_Click"   TabIndex ="1"> 转到   </ asp :   LinkButton >
          < div >
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值