DataGridView是否始终依赖于公共属性来获取列值?

问题描述

| 在运行时,我有行的集合(
Row
类)。它们每个都由列值组成,由
ColumnValue
类的实例表示。列的名称在运行时确定,并位于单独的列描述符集合(collection2ѭ类)中。 我想创建一个显示所有“ 0”实例的“ 3”。当然,“ 3”列应与包含集合中“ 2”实例指定的列完全相同。 但是由于ѭ3的列只能从列表项的公共属性获取其值,并且我无法在运行时轻松定义此类属性,因此无法使用ѭ3来显示表格数据。 正确? 考虑以下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
我不知道在定义(在运行时)
Column1
\''3ѭ列时会指定什么what11ѭ值??? 通常会问:“ 3”是否总是想要从具有公共属性的对象实例中获取数据,而这些实例定义了列结构,尤其是值?我无法显示完全没有公共财产的东西吗?     

解决方法

您应该覆盖
DataGridView
CellFormatting
事件,并将
e.Value
设置为
table(e.RowIndex)(e.ColumnIndex)
。