1

我有 2 个数据表被添加到数据集中:

父表:

Dim ctable As New DataTable("Category")
ctable.Columns.Add("Category", GetType(String))

一个子表:

Dim vtable As New DataTable("ValueTable")
vtable.Columns.Add("Category", GetType(String))
vtable.Columns.Add("Profile", GetType(String))
vtable.Columns.Add("Value", GetType(Double))

添加到数据集并使用数据关系通过“类别”列链接:

Dim masterdata As New DataSet()
masterdata.Tables.Add(ctable)
masterdata.Tables.Add(vtable)
Dim dr As DataRelation = New DataRelation("ValueCategory",
                                              ctable.Columns("Category"),
                                              vtable.Columns("Category"), True)
masterdata.Relations.Add(dr)

将此添加到 datagridview 作为数据源,如:

aDataGridView.DataSource = masterdata.tables(0)

这只会显示父表,但我希望有与我的数据关系相关的可扩展行,但它不会工作。我还尝试将我的数据源绑定到一个绑定源,其中数据源作为我的主数据表,我的数据成员是我的关系,这对我来说更有意义,但这也不起作用。最初我遵循以下示例

https://www.mindstick.com/Articles/1416/expandable-and-collapsible-rows-in-datagrid-in-c-sharp-winforms

这是一个类似的问题,但不一样:

在一个datagridview中显示父数据表并在另一个中显示子数据表元素?

4

1 回答 1

0

确实很有趣的问题,从未尝试过,我认为我很了解 DataGridView。

我会尝试绕过数据关系并执行以下操作:

  • 用相同的列定义 ctable 和 vtable ,因为 datagridview 必须有一组列
  • 仅将“类别”列用于类别,将其留空以获取详细信息(以区分两种类型的行
  • 添加隐藏列 IsExpanded 作为 DataGridViewCheckBox。默认 = 假
  • 创建 CellClick 事件,该事件将为 IsExpanded 中的当前行 (e.rowindex) 值循环(但仅当该行是类别行时)并调用 UpdateGrid() 函数
  • 在 UpgradeGrid() 函数中,注意将详细信息直接添加到您用作 DataSource 的(一个)DataTable 中(也就是将 vtables 加入 ctables 以扩展类别;您可以在此处使用 datarelation)。

我希望我清楚地解释了我的想法。如果可能的话,我也会尝试一下,这可能会派上用场。

于 2017-10-24T14:10:42.567 回答