【问题标题】:DataGridView complex bindingDataGridView 复杂绑定
【发布时间】:2011-02-03 20:56:44
【问题描述】:

我想绑定 DataGridView 中的列以从两个不同的类中提取值。我的应用程序在 WinForms 中。

我有这样的数据结构:

Class A
    Number As Integer
    Items as List(Of Class B)
End Class

Class B
    Number as Integer
    Value as Double
End Class

我需要能够在 DataGridView 中显示它,其中第一列是 A.Number,后续列是 Items 列表中的每个项目。

Items
1     1-1.5     2-2.0     3-3.6
2     1-1.0     2-3.9     3-4.2
.
.
.

到目前为止,我唯一在短时间内似乎可行的建议是将其转换为数据表并绑定它,但这看起来非常难看。

感谢您的帮助!

【问题讨论】:

  • 你可以使用 LINQ 吗?您可以使用 selectmany/grouping 运算符,然后将其展平为列表。你最终还是要手动创建/编辑列。

标签: .net winforms datagridview


【解决方案1】:

有几次,我有一个数据网格,我想从几个不同的地方提取列。我发现的最简单的技术是创建一个显示类,它只是一堆用于导航某些对象模型的 getter 方法。然后我绑定到那个显示类。

在此示例中,您必须执行以下操作:

Class ADisplay
    private A target
    public ADisplay(A target)
        Me.target = target
    End

    public property Number
        return target.Number
    End

    public property Item0
        return FormatItem(0)
    End

    public property Item1
        return FormatItem(1)
    End
    ...
    private Function FormatItem(i as Integer) As String
        B item = target.Items(i)
        ' Now format that item
        ...

对不起,我的 VB.NET 很生锈,但我希望它足够清楚,让你明白。

【讨论】:

    【解决方案2】:

    如果您需要使用 datagrid 做非常复杂(并且可能很奇怪)的事情,那么您可以使用 SourceGrid 作为控件。它非常灵活,几乎可以让你用网格做所有事情。

    【讨论】:

      猜你喜欢
      • 2011-08-22
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 2019-04-11
      • 2017-06-09
      • 1970-01-01
      相关资源
      最近更新 更多