当前位置: 首页 > news >正文

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

 

转载于:https://www.cnblogs.com/itjeff/p/5753455.html

相关文章:

  • 使用nginx反向代理解决前端跨域
  • zookeeper 安装配置
  • Sqli-labs less 16
  • Linux - linux命令的格式
  • Oracle Spatial构建点、线、面
  • 【趣事】一根网线发起的攻击
  • UVA10976 Fractions Again?!
  • 关于ECC内存
  • shell脚本实例(2)
  • WinForm 窗体属性
  • Javascript弹出层-初探
  • Java json工具类,jackson工具类,ObjectMapper工具类
  • PostgreSQL 最佳实践 - 任意时间点恢复源码分析
  • 第一次作业p7 1-1 1-2 1-6
  • 华为VRRP配置
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【翻译】babel对TC39装饰器草案的实现
  • 3.7、@ResponseBody 和 @RestController
  • co模块的前端实现
  • CSS盒模型深入
  • ES2017异步函数现已正式可用
  • express + mock 让前后台并行开发
  • HTTP请求重发
  • Linux下的乱码问题
  • MobX
  • Node 版本管理
  • storm drpc实例
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Vue实战(四)登录/注册页的实现
  • vue中实现单选
  • 阿里云应用高可用服务公测发布
  • 代理模式
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 近期前端发展计划
  • 前端面试总结(at, md)
  • 前言-如何学习区块链
  • 一些css基础学习笔记
  • 阿里云移动端播放器高级功能介绍
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • !!java web学习笔记(一到五)
  • #Z2294. 打印树的直径
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (转)Linux下编译安装log4cxx
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .Net CF下精确的计时器
  • .NET/C# 使窗口永不获得焦点
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [BT]BUUCTF刷题第9天(3.27)