Пользовательская привязка нескольких полей в Custom DataGridViewColumn (WinForms)

У меня есть вопрос относительно привязки данных (нескольких свойств) для пользовательского DataGridViewColumn. Вот схема того, какие элементы управления у меня есть, и мне нужно сделать ее привязываемой к источнику данных DataGridView. Любые идеи или ссылка на статью, обсуждающую этот вопрос?

Управление

  • Элемент управления графиком (пользовательский): отображается в пользовательском столбце DataGridView. Имеет такие свойства, как «Дата начала», «Дата окончания», элемент управления Windows Chart, который сам по себе является привязываемым и т. Д.
  • Настраиваемая ячейка (DataGridViewCustomCell наследуется от DataGridViewCell), которая содержит элемент управления Graph и обрабатывает некоторые события (например, событие OnEnter передает фокус пользовательскому столбцу Graph для событий типа перетаскивания и т. д.)
  • Пользовательский столбец (DataGridViewCustomColumn наследуется от DataGridViewColumn), определяющий тип шаблона ячейки: CellTemplate = new DataGridViewCustomCell(); а также основной выбор для привязки данных

Структура данных:

  • Основная таблица для отображения в других столбцах DataGridView
  • Таблица графа - связана с основной таблицей через отношения родитель-потомок. Содержит данные графика
  • Таблица диаграммы связана с таблицей графа через отношения родитель-потомок. Содержит данные для диаграммы выигрышной формы, которая является частью моего элемента управления Graph.

До сих пор я не могу даже связать данные из таблицы Graph с помощью элемента управления Graph или столбца/ячейки, содержащего график.


person Vera    schedule 24.12.2008    source источник


Ответы (2)


Спасибо за ваш ответ. Мои источники данных не являются источником данных SQL, и на самом деле я говорил о datagridview для win-форм (я не уверен, что это понятно).

Поскольку я не получил ответа ни на одном из форумов, на которых я задавал вопрос, я решил, что напишу решение, которое я придумал, для тех, у кого может быть аналогичная проблема, и для возможной критики. :-)

(шаги 1-2 также объясняются в известном примере MS) 1. Создайте свои собственные классы, которые наследуются от DataGridViewColumn и DataGridViewCell, настройте шаблон столбца; 2. Создайте свой элемент управления «CustomEdit».

  1. В элементе данных, независимо от того, DataRow или элемент списка, добавьте свойство только для чтения, которое возвращает сам объект. Это свойство привязано к пользовательскому столбцу.

Пользовательская ячейка:

public partial class MyCell : DataGridViewCell 
 {
    protected override void Paint(...)
        {...} // draws control
              // receives data item as a value 
              // in my case I have to custom-draw entire control in this fnc.
    public override void InitializeEditingControl(...)
        {...} // initialize control editing
    // override some other properties
    public override Type EditType {
        get{ 
           return typeof(MyEditControl);
        }
    }
    public override Type ValueType{
        get{
           return typeof(MyItem);
        }
    }
 }

Пользовательский столбец:

public partial class MyColumn : DataGridViewColumn
{
    public MyColumn(){ ...
    CellTemplate = new MyCell();
    }
}

Редактировать элемент управления:

public partial class MyEditControl : UserControl, IDataGridViewEditingControl
{... // implements IDataGridViewEditingControl
     // value is our data item
}

Элемент данных, источники данных становятся List‹MyItem›

public class MyItem:Object{
    ...
    [XmlIgnore] // I need it because I do serialization
    public MyItem Self {
        get {
            return this;
        }
    }
 }
person Vera    schedule 27.01.2009

См. мой вопрос здесь

Это легко сделать, вы просто не используете для этого IDE, вы делаете все это в коде. Это много работы, но это не так сложно, если вы знаете, что делаете. Я прошел путь от ничего не зная до того, что смог сделать это менее чем за день, поэтому я уверен, что вы сможете это сделать.

Изменить: вы также можете использовать соединение в sql, которое заполняет datagridview

person Malfist    schedule 08.01.2009