Спасибо за ваш ответ. Мои источники данных не являются источником данных SQL, и на самом деле я говорил о сетевом представлении для win-форм (я не уверен, что это было понятно).
Поскольку я не получил ответа ни на одном из форумов, на которых я задавал вопрос, я решил изложить решение, которое мне пришло, для тех, у кого может быть похожая проблема, и для возможной критики. :-)
(шаги 1-2 также объясняются в известном примере MS)
1. Создайте свои собственные классы, которые наследуются от DataGridViewColumn и DataGridViewCell, настройте шаблон столбца;
2. Создайте свой элемент управления «CustomEdit»
- В элементе данных, независимо от того, что это, 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;
}
}
}