2008-12-24 56 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; 
     } 
    } 
}