ASP.NET DataGrid控件呈现一个多列、完全模板化的网格,它是 .NET 框架中所有数据绑定 Web 控件中最通用和最灵活的控件。DataGrid 的用户界面在某种程度上类似于 Microsoft Excel 工作表。尽管 DataGrid 具有高级的编程接口以及完整的属性集,但是它只生成包含交错超级链接的 HTML 表,从而提供互操作功能(例如,排序和分页命令)。
使用 DataGrid 控件,可以创建简单的数据绑定列(显示从数据源检索的数据)、模板化列(允许您设计单元格内容的布局),***但也很重要的是基于命令的列(允许您向网格中添加特定的功能)。
DataGrid 控件很适合报告数据,而且其足够的灵活性允许您构建复杂且具有专业外观的数据表,在这些数据表中,可随意实现诸如分页和排序之类的功能。然而,其他功能(例如,深化和主/细)只需要较少的工作。在本月的专栏中,我将讨论一个无法由该控件本身提供、但是颇受许多人欢迎的功能。因此,让我们研究一下如何自动生成复杂的报表,在这些表中,必须显示具有部分合计的汇总行。
ASP.NET DataGrid控件
可通过设置 DataGrid 控件的 DataSource 属性来将实际数据绑定到该控件的实例。此属性是一般的 Object 类型,并且支持两个配置方案。通常用实现 ICollection 接口的数据对象来设置它。通常将使用 DataTable 和 DataView 对象。另一种方法是,用另一个对象类型(例如,data reader 对象)来设置它。不过,在这种情况下,必须打开自定义分页机制;否则将引发异常。简单地说,您要么将 DataGrid 绑定到分页数据源(即用来实现枚举数的集合对象),要么必须为自己提供分页。
对于 Web 控件,数据绑定处于启用状态,只有在调用 DataBind 方法时,用户界面才进行刷新。在刷新过程中,该控件会遍历数据源并将一些行复制到它的 Items 集合中。Items 属性代表当前显示页的内容。如果数据源支持分页(即,实现 ICollection),则 DataGrid 从 DataSource 选择适合当前页的正确行子集。否则,它假设 DataSource 的全部内容都适合当前页并将它们全部加载到 Items 中。在填充完 Items 之后,就会呈现该控件的用户界面。
此处有何教训?DataGrid 控件能够安全而又一致地显示的全部内容就是绑定数据源中包含的行。因此,如果您希望插入汇总行,以便按照公共键对某些记录进行分组并显示部分合计,则必须指出将这些汇总行直接插入数据源的方法。
然而,将汇总行插入数据源是不够的。实际上,必须能够区分汇总行和普通行,并用不同的视觉样式呈现前者。
在将数据附加到该控件之前,确保数据源包含其所需的所有汇总行。接着,挂钩 ItemCreated 事件,检测每个汇总行,然后用不同的布局和样式绘制它们。让我们看一看如何在 SQL 查询的不同行之间插入汇总行。我将使用基于 Northwind SQL Server 数据库的示例应用程序来阐释我的观点。该应用程序列出每个客户已在给定年份发出的所有定单。定单按年份和客户 ID 进行分组。对于每个客户,都额外有一行来汇总定单的总数和总额。
以上就介绍了ASP.NET DataGrid控件的基本知识。
【编辑推荐】