3

カスタムDataGridViewColumnの(複数のプロパティの)データバインディングについて質問があります。これが私が持っているコントロールのスキーマであり、DataGridViewデータソースとバインド可能にする必要があります。問題を議論しているアイデアや記事へのリンクはありますか?

コントロール

  • グラフコントロール(カスタム):custromDataGridView列に表示されます。「開始日」、「終了日」、それ自体であるWindowsチャートコントロール、バインド可能などのプロパティがあります。
  • グラフコントロールを保持し、いくつかのイベントを処理するカスタムセル(DataGridViewCustomCellはDataGridViewCellから継承します)(たとえば、OnEnterイベントは、ドラッグアンドドロップタイプのイベントのカスタムグラフ列にフォーカスを渡しますなど)
  • セルテンプレートタイプを定義したカスタム列(DataGridViewCustomColumnはDataGridViewColumnから継承):CellTemplate = new DataGridViewCustomCell(); また、データバインディングの主な選択肢

データ構造:

  • 他のDataGridView列に表示されるメインテーブル
  • グラフテーブル-親子関係を介してメインテーブルに関連付けられます。グラフデータを保持します
  • 親子関係を介してグラフテーブルに関連するチャートテーブル。グラフコントロールの一部であるwin-formチャートのデータを保持します。

これまでのところ、グラフテーブルからグラフコントロールまたはグラフ保持列/セルによってデータをバインドすることさえできません。

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
}

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 を使わずにすべてコードで行うだけです。大変な作業ですが、自分が何をしているのかを知っていれば、それほど難しくありません。私は何も知らなかったのが、1 日もかからずにできるようになったので、きっとできると思います。

編集:データグリッドビューにデータを入力するSQLで結合を使用することもできます

于 2009-01-08T17:28:54.223 に答える