• AspNetPager使用指南


    一、AspNetPager支持两种方式分页:
    一种是PostBack方式分页,
    一种是通过Url来实现分页以及Url重写功能
    二、AspNetPager支持各种数据绑定控件GridView、DataGrid、DataList、Repeater以及自定义的数据绑定控件的分页功能十分强大。
    三、AspNetPager分页控件本身并不显示任何数据,而只显示分页导航元素,数据在页面上的显示方式与该控件无关,所以需要手写数据连接方法来配合,
    四、结合TOP 。。。NOT IN 的通用存储过程分页方法使用AspNetPager十分实用

    测试控件datalist aspnetpager 的分页方法示例   分页方法为 PostBack 方式
    1、 首先将AspNetPager.dll复制于应用程序下的bin目录,打开解决方案,引入dll文件
    2、 在工具栏中添加控件,这样可以支持拖拽使用
    3、  要使用AspNetPager 要为其设置最基本的属性
    使用 SqlServer Northwind数据库的 Products表
    protected Wuqi.Webdiyer.AspNetPager AspNetPager1;
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.DataList DataList1;
    private void Page_Load(object sender, System.EventArgs e)
    {
           this.AspNetPager1.PageSize=10;     //设置每也显示的记录条数
           if(!IsPostBack)                       //只在页面第一次加载时起作用
           {
                  SqlDBManager db = new SqlDBManager(System.Configuration.ConfigurationSettings.AppSettings["SqlConnectionString"]);
                  AspNetPager1.RecordCount=db.CountPage("products");//获得要使用表的记录总数
                                                                                                 //db.CountItems自定义的方法
                  this.BindData();                                  
           }
    }
    private void BindData()
    {
           SqlDBManager db= new SqlDBManager(System.Configuration.ConfigurationSettings.AppSettings["SqlConnectionString"].ToString();
           DataList1.DataSource=db.FenPage(this.AspNetPager1.PageSize,this.AspNetPager1.CurrentPageIndex,"productid","products","productid,productname,unitprice,unitsinstock","");
    //自定义方法由 TOP not in 存储过程分页方法改编
           this.DataList1.DataBind();                //控件数据绑定
           this.Label1.Text="当前第"+this.AspNetPager1.CurrentPageIndex+"页 总"+this.AspNetPager1.PageCount+"页";
    }
    private void AspNetPager1_PageChanged(object sender, System.EventArgs e)
    {       //页索引改变方法
        this.BindData();
    }

    设计页效果
    <asp:DataList id="DataList1" style="Z-INDEX: 101; LEFT: 296px; POSITION: absolute; TOP: 96px" runat="server">
           <HeaderTemplate>
                  <table border='1'>
                         <tr>
                                <td>产品ID</td>
                                <td>产品名称</td>
                                <td>产品数量</td>
                                <td>产品单价</td>
                         </tr>
           </HeaderTemplate>
           <FooterTemplate>
                  </table>
    </FooterTemplate>
           <ItemTemplate>
                  <tr>
                                <td><%# DataBinder.Eval(Container.DataItem,"Productid")%></td>
                              <td><%# DataBinder.Eval(Container.DataItem,"productname")%></td>
                                <td><%# DataBinder.Eval(Container.DataItem,"unitprice")%></td>
                                <td><%# DataBinder.Eval(Container.DataItem,"unitsinstock")%></td>
                         </tr>
           </ItemTemplate>
    </asp:DataList>
    <webdiyer:AspNetPager id="AspNetPager1" style="Z-INDEX: 102; LEFT: 256px; POSITION: absolute; TOP: 40px" runat="server" Width="500px" FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PrevPageText="上一页" Height="40px" NumericButt PagingButt ShowNavigati ShowInputBox="Always" TextAfterInputBox="页" TextBeforeInputBox="跳转到第" AlwaysShow="True">
    </webdiyer:AspNetPager>
    <asp:Label id="Label1" style="Z-INDEX: 103; LEFT: 120px; POSITION: absolute; TOP: 56px" runat="server">Label</asp:Label> 

    以下是我的项目中的可用部分:

    private void BindData()
            {
                var pagesize = pager.PageSize;
                var sort = "id desc";
                int total;

                var sb = new StringBuilder();
                sb.Append(this.BuildQueryCondition());
                var strWhere = sb.ToString();
                var dao = new OrderInPerDayByUseInfoLogic();
                if (BuildSPQueryCondition() != glbWhere)
                {
                    dao.getOrderInPerDayByUseInfo(this.tbStartDate.Text.Trim(), this.tbEndDate.Text.Trim(), this.tbCouponCnt.Text.Trim(), this.tbOrderCnt.Text.Trim());
                    glbWhere = this.BuildSPQueryCondition();
                }
                var list = dao.PageQueryList(pager.CurrentPageIndex, pagesize, sort, strWhere, out total);
                rptBill.DataSource = list;
                rptBill.DataBind();
                pager.RecordCount = total;
            }

    public virtual List<T> PageQueryList(int page, int pageSize,
                string sort, string where, out int total)
            {
                var viewName = typeof(T).Name;
                var paras = new List<SqlParameter>
                                    {
                                        new SqlParameter("tblName", "dbo."+viewName),
                                        new SqlParameter("fldName", "*"),
                                        new SqlParameter("pageSize", pageSize),
                                        new SqlParameter("page", page),
                                        new SqlParameter("fldSort", sort),
                                        new SqlParameter("strCondition", where),
                                        new SqlParameter("pageCount", SqlDbType.Int){Direction = ParameterDirection.Output},
                                    };
                var countParameter = new SqlParameter
                {
                    ParameterName = "counts",
                    SqlDbType = SqlDbType.Int,
                    Direction = ParameterDirection.Output
                };
                var strParameter = new SqlParameter("strSql", SqlDbType.NVarChar, 4000) { Direction = ParameterDirection.Output };

                paras.Add(countParameter);
                paras.Add(strParameter);

                //var conn = _entities.Database.Connection.ConnectionString;
                //var ds = SqlHelper.ExecuteDataset(conn, CommandType.StoredProcedure,
                //                                  "dbo.PagedQuery", paras.ToArray());
                //total = countParameter.Value == DBNull.Value ? 0 : Convert.ToInt32(countParameter.Value);
                var ret =_entities.Database.SqlQuery<T>(
                    "dbo.PagedQuery @tblName,@fldName,@pageSize,@page,@fldSort,@strCondition,@pageCount out,@counts out,@strSql out",
                    paras.ToArray()).ToList();
                total = countParameter.Value == DBNull.Value ? 0 : Convert.ToInt32(countParameter.Value);
                return ret;
            }

    ALTER PROCEDURE [dbo].[PagedQuery]
    (
    @tblName     nvarchar(200),        ----要显示的表或多个表的连接
    @fldName     nvarchar(500) = '*',    ----要显示的字段列表
    @pageSize    int = 10,        ----每页显示的记录个数
    @page        int = 1,        ----要显示那一页的记录
    @fldSort    nvarchar(200) = null,    ----排序字段列表或条件
    --@Sort        bit = 0,        ----排序方法,0为升序,1为降序(如果是多字段排列Sort指代最后一个排序字段的排列顺序(最后一个排序字段不加排序标记)--程序传参如:' SortA Asc,SortB Desc,SortC ')
    @strCondition    nvarchar(max) = null,    ----查询条件,不需where,以And开始
    @pageCount    int = 1 output,            ----查询结果分页后的总页数
    @Counts    int = 1 output,                ----查询到的记录数
    @strSql          nvarchar(max) = '' output  -----最后返回的SQL语句
    )
    AS
    SET NOCOUNT ON
    --Declare @sqlTmp nvarchar(max)        ----存放动态生成的SQL语句
    Declare @strTmp nvarchar(max)        ----存放取得查询结果总数的查询语句

    if @strCondition is null
    set @strCondition=''
    --------生成查询语句--------
    --此处@strTmp为取得查询结果数量的语句
    set @strTmp='select @Counts=count(1) FROM '+@tblName + ' where (1>0) ' + @strCondition
    ----取得查询结果总数量-----
    exec sp_executesql @strTmp,N'@Counts int out ',@Counts out
    declare @tmpCounts int
    if @Counts = 0
        set @tmpCounts = 1
    else
        set @tmpCounts = @Counts
        --取得分页总数
        set @pageCount=(@tmpCounts+@pageSize-1)/@pageSize
        /**//**当前页大于总页数 取最后一页**/
        if @page>@pageCount
            set @page=@pageCount
        else IF @page<1
      set @page=1
        --/*-----数据分页2分处理-------*/
        declare @pageIndex int --总数/页大小
        declare @lastcount int --总数%页大小
        set @pageIndex = @tmpCounts/@pageSize
        set @lastcount = @tmpCounts%@pageSize
        if @lastcount > 0
            set @pageIndex = @pageIndex + 1
        --else
        --    set @lastcount = @pagesize
           
        declare @startIndex int
        declare @endIndex int
        set @startIndex=(@page-1)*@pageSize+1;
        IF @page=@pageIndex
      set @endIndex=@tmpCounts
     else
      set @endIndex=@page*@pageSize
       
        if @page=1   --前半部分数据处理
            begin
                set @strTmp='select top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
         +' where (1>0) '+@strCondition
                        +' order by '+ @fldSort
            end
        else
            begin
       set @strTmp='with cte as ('+
         ' select '+@fldName+',row_number() over(order by '+@fldSort+') as _rn from '+@tblName+
         ' where (1>0) '+@strCondition+
         ')'+
         ' select '+@fldName+' from cte'+
         ' where _rn>='+cast(@startIndex as varchar(10))+' and _rn<='+cast(@endIndex as varchar(10));
      end
    ------返回查询结果-----
    set @strSql = @strTmp
    exec sp_executesql @strTmp
    --print @strTmp

  • 相关阅读:
    Scala学习笔记
    flume ng 1.3 安装(转)
    学习scala trait
    scala性能测试
    scala容器使用
    hdu 4607 Park Visit
    FZU 1591 Coral的烦恼
    fzu 1675 The Seventy-seven Problem
    hdu 4602 Partition
    zoj 1842 Prime Distance
  • 原文地址:https://www.cnblogs.com/itjeff/p/5753455.html
Copyright © 2020-2023  润新知