在运行时,我有一组行(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
的{{1}}列时我会指定的Column1
值???
一般问:DataGridView
是否总是想要从具有公共属性的对象实例中获取数据,那些是否定义了列结构,尤其是值?我根本无法显示没有公共属性的内容?
答案 0 :(得分:2)
您应该覆盖CellFormatting
DataGridView
事件并将e.Value
设置为table(e.RowIndex)(e.ColumnIndex)
。