2011-02-03 78 views
1

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

我有一个数据结构是这样的:

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

Class B 
    Number as Integer 
    Value as Double 
End Class 

我需要能够与所述第一列被A.Number和后续列是在项目列表中的每个项目一个DataGridView显示这些。

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

唯一的建议,到目前为止我已经似乎在短时间内可行的是将其转换为一个DataTable和绑定的是,但这似乎非常难看。

感谢您的帮助!

+0

你可以使用LINQ吗?你可以使用selectmany/grouping操作符,然后将其平铺到列表中。你仍然最终会手动创建/编辑列。 – 2011-02-03 21:01:56

回答

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是很生疏,但我希望这是很清楚,你得到的想法。

0

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