Всегда ли DataGridView зависит от открытых свойств для значений столбцов? - PullRequest
2 голосов
/ 26 мая 2011

Во время выполнения у меня есть коллекция строк (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 всегда хочет получить данные из экземпляров объекта с открытыми свойствами,а те определяют структуру столбца и особенно значения?Я не могу отобразить материал, у которого вообще нет открытых свойств?

1 Ответ

2 голосов
/ 27 мая 2011

Вы должны переопределить событие CellFormatting для DataGridView и установить e.Value на table(e.RowIndex)(e.ColumnIndex).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...