作成日: 2023/03/06 最終更新日: 2023/03/06
文書種別
使用方法
詳細
C1FlexGridRowDetailクラスと2つのデータテーブル("Parent"、"Child")を使ってマスター/詳細形式の階層ビューを設定し、詳細グリッドをクリックしたときにそのセルのデータを表示する方法を紹介します。その際、親グリッドの行データを表示することも可能です。
主なステップは次の通りです。
1. マスター/詳細用の各データテーブルを作成し、データセットに追加します。
2. 2つのデータ間の関連(マッピング)を定義します。
3. C1FlexGridのDataSourceプロパティにデータセットを設定します。
4. C1FlexGridのRowDetailProviderプロパティに、C1FlexGridRowDetailクラスのインスタンスを割り当てます。
5. マスターグリッドの「+」をクリックした時に発生するC1FlexGrid1_ControlAddedイベントで、詳細グリッドのClickイベントを追加します。
6. ステップ5で追加したClickイベントで、下記データを表示するコードを設定します。
・親グリッドの行データ:C1FlexGridコントロールのカレント行のデータ
・詳細グリッドのセルデータ:Clickイベントのsender引数で取得した詳細グリッドのセルデータ
※プロジェクトにC1.Win.C1FlexGrid.RowDetails.xxx.dllへの参照を追加しておく必要があります。

以下に、詳細グリッドのセルクリック時に、上記データをデバッグ出力するための設定コード(ステップ5、6)を記載します。
※ステップ1~4までのコードは、以下のナレッジを参照してください。
[FlexGrid for WinForms] C1FlexGridRowDetail(行詳細)を用いて、マスター/詳細形式の階層ビューを設定する方法
◎サンプルコード(VB)
主なステップは次の通りです。
1. マスター/詳細用の各データテーブルを作成し、データセットに追加します。
2. 2つのデータ間の関連(マッピング)を定義します。
3. C1FlexGridのDataSourceプロパティにデータセットを設定します。
4. C1FlexGridのRowDetailProviderプロパティに、C1FlexGridRowDetailクラスのインスタンスを割り当てます。
5. マスターグリッドの「+」をクリックした時に発生するC1FlexGrid1_ControlAddedイベントで、詳細グリッドのClickイベントを追加します。
6. ステップ5で追加したClickイベントで、下記データを表示するコードを設定します。
・親グリッドの行データ:C1FlexGridコントロールのカレント行のデータ
・詳細グリッドのセルデータ:Clickイベントのsender引数で取得した詳細グリッドのセルデータ
※プロジェクトにC1.Win.C1FlexGrid.RowDetails.xxx.dllへの参照を追加しておく必要があります。
以下に、詳細グリッドのセルクリック時に、上記データをデバッグ出力するための設定コード(ステップ5、6)を記載します。
※ステップ1~4までのコードは、以下のナレッジを参照してください。
[FlexGrid for WinForms] C1FlexGridRowDetail(行詳細)を用いて、マスター/詳細形式の階層ビューを設定する方法
◎サンプルコード(VB)
private void c1FlexGrid1_ControlAdded(object sender, ControlEventArgs e)
{
var count = e.Control.Controls.Count;
if ((count > 0) && (e.Control.Controls[count - 1].GetType() == typeof(C1FlexGridRowDetail)))
{
C1FlexGrid grid = (C1FlexGrid)e.Control.Controls[count - 1].Controls[0];
grid.BeginInvoke((MethodInvoker)(() => {
grid.Click += ChildGrid_Click;
}));
}
}
private void ChildGrid_Click(object sender, EventArgs e)
{
C1FlexGrid fg = (C1FlexGrid)sender;
System.Diagnostics.Debug.WriteLine("◆親グリッドのデータ:" + $"{c1FlexGrid1.GetData(c1FlexGrid1.Row, 1)}" + " " + $"{c1FlexGrid1.GetData(c1FlexGrid1.Row, 2)}");
System.Diagnostics.Debug.WriteLine(" 詳細グリッドのセルのデータ:" + fg[fg.RowSel, fg.ColSel].ToString());
}
◎サンプルコード(C#)
private void c1FlexGrid1_ControlAdded(object sender, ControlEventArgs e)
{
var count = e.Control.Controls.Count;
if ((count > 0) && (e.Control.Controls[count - 1].GetType() == typeof(C1FlexGridRowDetail)))
{
C1FlexGrid grid = (C1FlexGrid)e.Control.Controls[count - 1].Controls[0];
grid.BeginInvoke((MethodInvoker)(() => {
grid.Click += ChildGrid_Click;
}));
}
}
private void ChildGrid_Click(object sender, EventArgs e)
{
C1FlexGrid fg = (C1FlexGrid)sender;
System.Diagnostics.Debug.WriteLine("◆親グリッドのデータ:" + $"{c1FlexGrid1.GetData(c1FlexGrid1.Row, 1)}" + " " + $"{c1FlexGrid1.GetData(c1FlexGrid1.Row, 2)}");
System.Diagnostics.Debug.WriteLine(" 詳細グリッドのセルのデータ:" + fg[fg.RowSel, fg.ColSel].ToString());
}