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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)