用于显示分层数据的嵌套网格(from msdn)

作者:袖梨 2022-06-30
在“前沿技术”的 2003 年 8 月刊,我讨论了如何扩展 ASP.NET DataGrid 服务器控件,以便将多表数据容器(如 DataSet 对象)用作其数据源。
 如果 DataSet 包含数对相关表,则只要所显示的表是其中某个关系的父级,该控件就将添加动态创建的按钮列。
 当单击此列按钮时,将显示子 DataGrid,并将根据此关系列出选定记录的子行。
 总体行为显示在图 1 中,此行为与 Windows® 窗体 DataGrid 控件在类似情形下的工作方式相同。
图 1 父级和子级 DataGrids
图 1 中显示的应用程序是包含两个一起工作的 DataGrid 控件的用户控件。
 该用户控件(请参阅 2003 年 8 月的源代码)包含使两个网格保持同步所需的全部逻辑。
 父 DataGrid 绑定到 DataSet 并显示父表的内容。
 当这一情况发生时,该用户控件确保 DataSet(所显示的表在其中充当父级)内部存在关系。
 子 DataGrid 绑定到数据视图,该视图包含仅仅与选定记录相关的子表中的所有记录。
 因此,如果您有一个 DataSet,并且它有两个已建立关系的表,那么该用户控件将为您节省时间,因为您不需要针对任何额外的显示机制来编写代码。
那么这种方法有什么问题呢? 如果您仅仅关注基本功能,那么它没有问题。
 但是,一些读者已注意到不使用两个物理上分隔的 DataGrid 控件也许会更好。
 该用户控件在组成控件的周围构建了一个壁垒,从而使您只能通过映射属性和方法或者通过公开整个内部控件来访问这些组成控件。
 从可编程性的观点来看,使用一个 DataGrid 控件来显示分层数据要简单得多。
 首先,您不必担心父表的配置问题。
 只需使用 DataGrid 控件的标准接口即可。
 显示相关数据的任何子网格都可以动态创建,并可以显示在主网络的布局内部。
图 2 嵌入式子 DataGrid
另一方面,需要提醒的是,设计 DataGrid 控件不是为了包含分层数据。
 其内部布局最适合显示表格式数据。
 DataList 控件可能是一个不错的选择,但它不提供固有的分页支持,并且需要一些代码才能像 DataGrid 一样工作。
 当在 Google 上快速搜索“嵌套 DataGrid”时,返回了讨论如何将 DataGrid 嵌入到 DataList 控件的文章的链接,这些文章给了我关于本专栏的一些启示。
 这里,我将构造一个从 DataGrid 类继承的自定义控件。
 该控件实现一个自定义列类型 (ExpandCommandColumn),并包含显示与被单击的项关联的记录所需的全部逻辑。

相关文章

精彩推荐