2008-12-24 82 views
3

我有一个关于自定义DataGridViewColumn的数据绑定(多个属性)的问题。 下面是我有什么控件的模式,我需要使它与DataGridView数据源绑定。任何想法或链接到讨论此事的文章?自定义DataGridViewColumn中的多个文件的自定义绑定(WinForms)

控制

  • 图形控件(自定义):在 的custrom DataGridView的列中显示。有 属性,如“开始日期”, “结束日期”时,Windows图表控件, 它本身,可绑定等
  • 自定义单元格(DataGridViewCustomCell继承 从的DataGridViewCell)持有 图形控制和处理一些 事件(事件的OnEnter,例如, 传递焦点到自定义图形 列的 事件拖N - 下降型等)
  • 定制柱(DataGridViewCustomColumn从的DataGridViewColumn 继承) 所定义的细胞的模板类型: CellTe mplate = new DataGridViewCustomCell();并且还对数据的 主要选择结合

数据结构:

    要显示在其他DataGridView列
  • 格拉夫表
  • 主表 - 经由父 - 子关系到主表关系。保存图形数据
  • 通过父子关系与图表相关的图表表格。保存Win-chart图表的数据,这是我的Graph控件的一部分。

到目前为止,我甚至无法通过图形控件或图表控制列/单元将图表表格中的数据绑定到图表控件。

回答

0

见我的问题Here

这很容易做到,你只要不使用IDE做到这一点,你做这一切的代码。这是很多工作,但如果你知道你在做什么并不难。我从一无所知到无法在一天内完成任务,所以我相信你能做到。

编辑:您还可以用在填充datagridview的

2

谢谢您的回答SQL中加入。我的数据源不是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 
} 

数据项,数据源变得列表<MyItem>

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