第一范文网 - 专业文章范例文档资料分享平台

创建用于ASPNET分页的控件

来源:用户分享 时间:2025/10/16 19:20:44 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

根据 SortField 的值添加一个正确的 ORDER BY 子句。这样做有什么原因吗?

当分页程序以 NonCached 模式工作时,原始的查询将被修改以确保只检索当前页面的记录。在 SQL Server 上执行的实际查询文本将采取以下形式。 SELECT * FROM

(SELECT TOP ItemsPerPage * FROM

(SELECT TOP ItemsPerPage*CurrentPageIndex * FROM (SelectCommand) AS t0

ORDER BY SortField ASC) AS t1 ORDER BY SortField DESC) AS t2 ORDER BY SortField

该查询弥补了 SQL Server 2000 中 ROWNUM 子句的缺陷,并且对记录进行重新排序,使得只有 x 项目的“第 n 个”块经过正确排序后返回。您可以指定基础查询,分页程序将它分解为多个较小的页面。只有适合某个页面的记录被返回。正如您看到的那样,除了查询命令以外,上述查询需要处理排序字段。这就是为什么另外添加了 SortField 属性。此代码的唯一缺陷是默认情况为升序排序。通过使 ASC/DESC 关键字参数化,可以使此代码真的非常完美: private void FetchPageData() {

// 需要经过验证的页面索引来获取数据。 // 还需要实际的页数来验证页面索引。 AdjustSelectCommand(false);

VirtualRecordCount countInfo = CalculateVirtualRecordCount(); TotalPages = countInfo.PageCount;

// 验证页码(确保 CurrentPageIndex 有效或为“-1”) ValidatePageIndex();

if (CurrentPageIndex == -1) return;

// 准备并运行命令

SqlCommand cmd = PrepareCommand(countInfo); if (cmd == null) return;

SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataTable data = new DataTable(); adapter.Fill(data);

// 配置分页的数据源组件 if (_dataSource == null)

_dataSource = new PagedDataSource(); _dataSource.AllowCustomPaging = true; _dataSource.AllowPaging = true; _dataSource.CurrentPageIndex = 0; _dataSource.PageSize = ItemsPerPage;

_dataSource.VirtualCount = countInfo.RecordCount; _dataSource.DataSource = data.DefaultView; }

在 NonCached 模式中,PagedDataSource 对象并不提供整个数据源,因此不能计算出要进行分页的总页数。进而必须对 AllowCustomPaging 属性进行标记,并提供数据源中的实际记录数量。通常,实际数量是使用 SELECT COUNT(*) 查询进行检索的。此模型与 DataGrid 的自定义分页几乎相同。此外,PagedDataSource 对象中选择的当前页面索引通常为 0,因为实际上已经存储了一页记录。

SqlPager 控件的实现方法就介绍到这里,下面我们介绍一下它的使用方法。 使用 SqlPager 控件

假设存在一个包含 ListBox 控件的示例页面。要使用分页程序,请确保 .aspx 页面正确地注册了该控件的程序集。

<%@ Register TagPrefix=\Assembly=\

控件的标记取决于实际设置的属性。以下标记是一个合理的示例:

SelectCommand=\ ConnectionString=\ SortKeyField=\

除了分页程序以外,页面还包含一个列表框和一个按钮。列表框将显示每个页面的内容;按钮只用于首次填充列表框。该按钮具有一个单击事件处理程序,定义如下。

private void LoadFirst1_Click(object sender, EventArgs e) { SqlPager1.CurrentPageIndex = 0; SqlPager1.DataBind(); }

图 2 显示操作中的页面。

图 2:与 ListBox 控件协同工作的 SqlPager 控件。

使用 DataList 控件可以生成一个更有意思的示例。目标是使用分页程序浏览每个 Northwind 职员的个人记录。该 DataList 如以下列表所示。

<%# DataBinder.Eval(Container.DataItem, \ DataBinder.Eval(Container.DataItem, \

<%# DataBinder.Eval(Container.DataItem, \

id=<%# DataBinder.Eval(Container.DataItem, \/>

<%# DataBinder.Eval(Container.DataItem, \

表格的第一行显示职员的姓名和职务,然后是相片,相片周围是注释。相片是使用特定的 .aspx 页面检索的,返回从数据库中获取的 JPEG 数据。 分页程序可以放置在页面中的任何位置。本例中将它放置在合作者 DataList 控件上方并紧挨着合作者控件。

图 3:SqlPager 对 DataList 控件进行分页

将 SqlPager 控件与 DataGrid 控件一起使用有意义吗?这要视情况而定。DataGrid 已经与一个基于本文中使用的 PagedDataSource 对象的嵌入式分页引擎一起工作。因此,如果您需要对以表格格式显示的单个记录集合进行分页时,就无需使用 SqlPager。但是,对于重要/复杂的方案,将这两个控件一起使用并不是一种牵强的想法。例如,如果您要向前一个屏幕快照添加一个

DataGrid 来显示由职员管理的订单,则可以在同一格页面上放置两个相关的分页引擎,一个要对职员进行分页,另一个用于滚动相关订单。 小结

不管您要生成哪种类型的应用程序(Web 应用程序、Microsoft? Windows? 应用程序或 Web 服务),您都很难下载和缓存要显示的整个数据源。有时,测试

搜索更多关于: 创建用于ASPNET分页的控件 的文档
创建用于ASPNET分页的控件.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c7iefg562xi2cg5h8iua4_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top