使用中继器和SQL定制分页
我一直在寻找一个很好的教程,教我如何使用像Repeater这样的简单DataBound控件来实现自定义的Paging控件,以实现高性能的分页function。
我发现了很多关于这个问题的文章,但没有一个是完整的答案。
-
在ASP.NET中分析大型结果集
这个很棒,有统计数据和不同方法之间的比较,但问题是它在SQL Server拥有它的新functionROW_NUMBER()之前已经太旧了
-
使用ASP.NET 3.5的N层Web应用程序第4部分:排序,分页和过滤(数据库分页部分,忽略其余部分)
这个几乎是完美的,但他使用网格现有的分页function和定制的分页方法,而不是转发器。
-
使用ASP.NET Repeater或DataList控件自定义SEO友好分页
我认为这个过于复杂,事情可以变得更容易
我正在使用SQL,Items Repeater(在没有使用数据源的代码隐藏中使用直接绑定),PageNumbers转发器(它将具有作为ItemTemplate的链接以传递查询字符串,因此使用的方法可以检索项的下一部分),用于保存当前页码和标题的标签。
我一直在尝试使用ASP.NET 3.5第4部分:排序,分页和过滤(数据库分页部分,忽略其余部分)在N层Web应用程序上实现该示例。 到目前为止,我已经在我的数据访问Lyaer中创建了一个SQL命令,如下所示:
WITH Records AS ( SELECT ItemId, ItemName, ROW_NUMBER() OVER (ORDER BY ItemId) AS 'RowNumber' FROM Items) SELECT * FROM Records WHERE (RowNumber BETWEEN (@startIndex) AND @startIndex + @pageSize - 1)
但现在我被困在如何在我的表示层使用它!
您可以创建自定义方法来呈现自己的分页控件。 这是一个例子:
/// /// Produces html for a pagination control. /// /// Page number for the current page (1-based index). /// Number or items per page. /// Total number of items across all pages. /// Html of a pagination control. public string RenderPaginationControl(int page, int pageSize, int totalItems) { int totalPages = (int)Math.Ceiling((double)totalItems/pageSize); // Create pager. StringBuilder pagerSb = new StringBuilder(); for (int i = 1; i <= totalPages; ++i) { // If it is NOT a link to current page. if (i != page) { pagerSb.Append(string.Format("{0}", i)); } // If it is the link to current page. else { pagerSb.Append(string.Format("{0}", i)); } } return pagerSb.ToString(); }
除了你的sql之外你还可以看到,你还需要打电话
SELECT COUNT(*) FROM Items
并将该值传递给RenderPaginationControl中的 totalItems 。
就与Repeater的绑定而言 – 它非常直接:
this.MyRepeater.DataSource = DAL.GetItems(page, pageSize); this.MyRepeater.DataBind(); int totalItems = DAL.GetTotalNumberOfItems(); this.PaginationLabel.Text = RenderPaginationControl(page, pageSize, totalItems);
- 如何在Xamarin表单NavigationPage中更改backGround颜色
- Windows Phone:如何判断Deployment.Current.Dispatcher.BeginInvoke何时完成?
- 使用分页刮取ASP.NET网站
- 永远等待localhost!
- 使用ASP.NET网站中的File.CreateFile将文件插入Sql Server 2012 FileTable时访问被拒绝
- 如何在Asp.net Gridview列中为Checkbox添加事件
- 从ASP.NET 5 Beta 4升级到Beta 5时出错
- 当我尝试将数据插入文本框时,System.Data.dll中出现未处理的“System.InvalidOperationException”类型的exceptionexception
- 如何访问Task.Factory.StartNew中的HttpContext.Current?
- 服务器标记不能包含结构
- 打开使用EPPlus创建的.xlsx文件并使用ICSharpCode.SharpZipLib压缩到一个文件夹时出现问题