DataGridView是否始终依赖于列值的公共属性?

时间:2011-05-26 15:58:32

标签: c# .net vb.net datagridview

在运行时,我有一组行(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是否总是想要从具有公共属性的对象实例中获取数据,那些是否定义了列结构,尤其是值?我根本无法显示没有公共属性的内容?

1 个答案:

答案 0 :(得分:2)

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