.net DataGridView复杂绑定

.net DataGridView复杂绑定,.net,winforms,datagridview,.net,Winforms,Datagridview,我想绑定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 Class ADisplay private A target public ADisplay(A t

我想绑定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
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
        ...
我需要能够在DataGridView中显示它,第一列是.Number,后续列是Items列表中的每个项目

Items
1     1-1.5     2-2.0     3-3.6
2     1-1.0     2-3.9     3-4.2
.
.
.
到目前为止,我得到的唯一一个在短时间内似乎可行的建议是将其转换为datatable并绑定,但这看起来非常难看


谢谢你的帮助

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

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

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

Class B
    Number as Integer
    Value as Double
End Class
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已经生锈了,但我希望它足够清晰,让您明白这一点。

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

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

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

Class B
    Number as Integer
    Value as Double
End Class
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已经生锈了,但我希望它足够清晰,让您明白这一点。

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

如果您需要使用datagrid做非常复杂(可能很奇怪)的事情,那么您可以使用作为控件。它非常灵活,允许您使用grid做几乎所有事情。

您可以使用LINQ吗?您可以使用selectmany/grouping运算符,然后将其展平为列表。您仍然会手动创建/编辑列。您可以使用LINQ吗?您可以使用selectmany/grouping运算符,然后将其展平为列表。您仍然需要手动创建/编辑列。