C# 在Datagridview中使用折叠/扩展行.net通过数据集显示相关数据表

C# 在Datagridview中使用折叠/扩展行.net通过数据集显示相关数据表,c#,.net,datagridview,datarelation,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))

我有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相关的可扩展行,但它不起作用。我还尝试将我的数据源绑定到bindingsource,其中datasource作为我的主数据表,datamember作为我的关系,这对我来说更有意义,但也不起作用。起初,我遵循下面的示例

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


的确是一个有趣的问题,我从未尝试过,我认为我很了解DataGridView

我将尝试绕过datarelation并执行以下操作:

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

我希望我能清楚地解释我的想法。如果可能的话,我也会尝试一下,这可能会很方便。

的确是一个有趣的问题,我从未尝试过,我认为我很了解DataGridView

我将尝试绕过datarelation并执行以下操作:

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

我希望我清楚地解释了我的想法。如果可能的话,我也会尝试,这可能会很方便。

谢谢你的回答。我理解这个过程,但与我在问题中发布的两个示例相比,我觉得它非常方便,实现起来也不太干净。无论如何,我会尝试你的应用程序roach,看看它是否有效。你的代码更精简,如果你让它工作了,请发布你的解决方案。但是关于开销,我认为大多数时候框架函数生成的隐藏开销比你用代码生成的要大。谢谢你的回答。我理解这个过程,但不觉得很简单与我在问题中发布的两个示例相比,这两个示例更干净,产生的开销更少。无论如何,我将尝试您的方法,看看它是否有效。您的代码更精简,如果您使其有效,请发布您的解决方案。然而,对于开销,我认为大多数情况下,隐藏的ov框架函数生成的erhead大于代码生成的erhead。链接的帖子使用
DataGrid
而不是
DataGridView
。如果更改控件,它对我有效。我不知道如何获取
DataGridView
来显示关系。链接的帖子使用
DataGrid
而不是
DataGridView
。如果更改控件,它对我有效。我不知道如何获取
DataGridView
以显示关系。