3

我对自定义 DataGridViewColumn 的数据绑定(多个属性)有疑问。这是我拥有的控件的架构,我需要使其可与 DataGridView 数据源绑定。任何想法或链接到讨论此事的文章?

控件

  • 图形控件(自定义):显示在自定义的 DataGridView 列中。具有“开始日期”、“结束日期”、Windows 图表控件等属性,该控件本身是可绑定的等。
  • 自定义单元格(DataGridViewCustomCell继承自DataGridViewCell),持有Graph控件并处理一些事件(例如,OnEnter事件,将焦点传递给自定义Graph列,用于拖放类型的事件等)
  • 定义单元格模板类型的自定义列(DataGridViewCustomColumn 继承自 DataGridViewColumn): CellTemplate = new DataGridViewCustomCell(); 也是数据绑定的首选

数据结构:

  • 要在其他 DataGridView 列中显示的主表
  • 图形表 - 通过父子关系与主表相关。保存图形数据
  • 图表表通过父子关系与图表表相关。保存 win-form 图表的数据,它是我的 Graph 控件的一部分。

到目前为止,我什至无法将 Graph 表中的数据绑定到 Graph 控件或 Graph-holding Column/Cell。

4

2 回答 2

2

谢谢您的回答。我的数据源不是 SQL 数据源,事实上我在谈论用于 win-forms 的 datagridview(我不确定这是否清楚)。

由于我在任何一个论坛上都没有得到答复,所以我想,我会为那些可能有类似问题和可能批评的人概述我想出的解决方案。:-)

(步骤 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
}

数据项,数据源变为 List<MyItem>

public class MyItem:Object{
    ...
    [XmlIgnore] // I need it because I do serialization
    public MyItem Self {
        get {
            return this;
        }
    }
 }
于 2009-01-27T22:25:35.943 回答
0

在这里查看我的问题

这很容易做到,你只是不使用 IDE 来做,你可以用代码来做。这是很多工作,但如果你知道自己在做什么,这并不难。我从一无所知到能够在不到一天的时间内做到这一点,所以我相信你一定能做到。

编辑:您还可以在填充 datagridview 的 sql 中使用 Join

于 2009-01-08T17:28:54.223 回答