Во время выполнения у меня есть коллекция строк (Row
класс).Каждое из них состоит из значений столбцов, представленных экземплярами класса ColumnValue
.Имя столбцов определяется во время выполнения и находится в отдельной коллекции дескрипторов столбцов (Column
класс).
Я хочу создать DataGridView
, который отображает все экземпляры Row
.Конечно, столбцы DataGridView
должны быть точно такими, которые указаны экземплярами Column
в содержащей коллекции.
Но поскольку столбцы DataGridView
могут извлекать свои значения из открытых свойств элемента спискатолько и я не может легко определить такое свойство во время выполнения , я не могу использовать DataGridView
для отображения табличных данных.
Исправить ?
Рассмотрим, например, следующие классы VB:
' Classes for table structure representation
Public Class TColumn ' describes my columns
Public Name As String
Public Index As Integer
Public Sub New(ByVal AName As String)
Name = AName
End Sub
End Class
Public Class TTable ' describes a table
Public Name As String
Public Columns As Collection
Public Sub New(ByVal AName As String)
Name = AName
Columns = New Collection
End Sub
End Class
' Classes for table data
Public Class TRow ' Container for one row's column values
Public ColumnValues As Collection
Public Sub New()
MyBase.New()
ColumnValues = New Collection()
End Sub
End Class
Public Class TTableData ' Container for a table's rows
Public Table As TTable
Public Rows As Collection
Public Sub New(ByVal ATable As TTable)
MyBase.New()
Table = ATable
Rows = New Collection()
End Sub
End Class
И этот основной код формы:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim T As TTable
Dim TD As TTableData
Dim CV As Collection
T = New TTable("Sample")
T.Columns.Add(New TColumn("Column1"))
T.Columns.Add(New TColumn("Column2"))
TD = New TTableData(T)
CV = New Collection
CV.Add("Row1Col1")
CV.Add("Row1Col2")
TD.Rows.Add(CV)
CV = New Collection
CV.Add("Row2Col1")
CV.Add("Row2Col2")
TD.Rows.Add(CV)
' Question: How can I create a DataGridView that displays this:
'
' Column1 Column2
' Row1Col1 Row1Col2
' Row2Col1 Row2Col1
'
' WHILE the Columns collection contents are dynamic, i.e. determined at runtime, not at compile- or design-time?
End Sub
End Class
Интересно, какое значение DataGridViewColumn.DataPropertyName
я бы указал, напримерпри определении (во время выполнения) Column1
столбца DataGridView
???
Обычно задается вопрос: верно ли, что DataGridView
всегда хочет получить данные из экземпляров объекта с открытыми свойствами,а те определяют структуру столбца и особенно значения?Я не могу отобразить материал, у которого вообще нет открытых свойств?