2011-02-03 4 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 

Мне нужно, чтобы иметь возможность показать это в DataGridView с первой колонки будучи A.Number и последующие столбцы, каждый элемент в списке элементов.

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, а затем сгладить это в список. Вы все равно должны вручную создавать/редактировать столбцы. –

ответ

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 как элемент управления. Он очень гибкий, и он позволяет делать почти все с сеткой.

Смежные вопросы