DataGridView - DataTable - отображение свойств - PullRequest
0 голосов
/ 28 января 2009

(.NET 2.0, System.Windows.FormsDataGridView и DataTable)

У меня есть 1 сетка данных, подключенная к 1 базе данных.

Эта таблица данных содержит 1 столбец: содержит объекты моего собственного типа "MyObject".
MyObject имеет публичное строковое свойство "MyProp".

Я хочу отобразить 1 столбец в сетке: отображение строковых значений свойства MyProp объектов MyObjects в таблице.

Но я не могу заставить его работать.

Схематично:

  • myTable.Column1.Name: "Obj"
  • myDataSet содержит 1 таблицу: myTable (заполнена несколькими строками)
  • myBindingSource.datasource = myDataSet
  • myBindingSource.DataMember = myTable
  • myDataGridView.DataSource = myBindingSource
  • в myDataGridView: 1 DataGridViewTextBoxColumn

  • проба 1:

Column.DataPropertyName = "Obj" (создается по умолчанию)

Отображение результата (переопределенного) MyObject.ToString () Не совсем то, что я хочу, эта функция используется для регистрации.

  • проба 2:

GridViewColumn.DataPropertyName = "Obj.MyProp"

Ничего не отображается (MyProp get никогда не вызывается)

  • проба 3: Сделано свойство MyProp привязываемым:

    [Bindable (BindableSupport.Yes)]
    public string MyProp
    { ...
    

    То же самое, не отличается от пробного 2

Короче:

GridViewColumn.DataPropertyName, по-видимому, не поддерживает углубление вниз в объекты в столбце таблицы данных.

У кого-нибудь есть идеи?

Заранее спасибо!

Jan

Ответы [ 3 ]

1 голос
/ 28 января 2009

Попробуйте просто поместить строковое значение Obj.MyProp в строку данных. Помещение объекта в него потребует его преобразования в строковое представление (Obj.ToString ()), которое дает вам вывод, который вы видите.

Таблица данных очень похожа на электронную таблицу, а не на массив (объектов). Вы должны относиться к нему как таковой.

0 голосов
/ 28 января 2009

Это можно сделать с помощью события OnRowDataBound.

В виде сетки

  1. объявить метод с привязкой к базе данных

  2. использовать шаблон

В методе:

  1. захват объекта

  2. заполнять или манипулировать дисплеем по желанию

Вы также можете делать что хотите, используя шаблоны вместо макета по умолчанию.

0 голосов
/ 28 января 2009

Вы можете привязать только к непосредственным свойствам источника данных. Для DataTable это означает столбцы. На ум приходят два варианта:

  • не используйте DataTable - просто используйте List<MyObject> или BindingList<MyObject>
  • (или) переопределить MyObject.ToString() для возврата MyProp

Второй не очень гибкий - я бы пошел с первым. В конце концов, что на самом деле делает для вас 1-столбец DataTable

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