谢谢您的回答。我的数据源不是 SQL 数据源,事实上我在谈论用于 win-forms 的 datagridview(我不确定这是否清楚)。
由于我在任何一个论坛上都没有得到答复,所以我想,我会为那些可能有类似问题和可能批评的人概述我想出的解决方案。:-)
(步骤 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
}
数据项,数据源变为 List<MyItem>
public class MyItem:Object{
...
[XmlIgnore] // I need it because I do serialization
public MyItem Self {
get {
return this;
}
}
}