Пользовательская привязка нескольких полей в Custom DataGridViewColumn (WinForms) - PullRequest
3 голосов
/ 24 декабря 2008

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

Органы управления

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

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

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

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

Ответы [ 2 ]

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

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

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

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

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

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

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
}

Элемент данных, источники данных становятся списком

public class MyItem:Object{
    ...
    [XmlIgnore] // I need it because I do serialization
    public MyItem Self {
        get {
            return this;
        }
    }
 }
0 голосов
/ 08 января 2009

Смотри мой вопрос Здесь

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

Редактировать: вы также можете использовать объединение в sql, которое заполняет сетку данных

...