使用折叠/展开行.net,通过Datagridview中的数据集显示相关数据表

时间:2017-10-24 09:20:24

标签: c# .net datagridview datarelation

我有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)

这只会显示父表,但我希望有与我的datarelation相关的可扩展行,但它不会工作。我也尝试将我的数据源绑定到一个绑定源,数据源作为我的masterdata表,我的数据库是我的关系,这对我来说更有意义,但这也没有用。最初我按照下面的例子

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

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

Showing parent datatable in one datagridview and show child datatable elements in another?

1 个答案:

答案 0 :(得分:0)

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

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

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

我希望我清楚地解释了我的想法。我会尽可能地尝试,这可能会派上用场。