作成日: 2023/03/06 最終更新日: 2023/03/06
文書種別
使用方法
詳細
C1FlexGridRowDetailクラスと2つのデータテーブル("Parent"、"Child")を使ってマスター/詳細形式の階層ビューを設定し、詳細グリッドの列幅を自動調整する方法を紹介します。なお同時に、詳細グリッドの行ヘッダの非表示、編集不可、最後の列幅の拡張などを行うことも可能です。
主なステップは次の通りです。
1. マスター/詳細用の各データテーブルを作成し、データセットに追加します。
2. 2つのデータ間の関連(マッピング)を定義します。
3. C1FlexGridのDataSourceプロパティにデータセットを設定します。
4. C1FlexGridのRowDetailProviderプロパティに、C1FlexGridRowDetailクラスのインスタンスを割り当てます。
5. マスターグリッドの「+」をクリックした時に発生するC1FlexGrid1_ControlAddedイベントで、詳細グリッドとして内部使用されているC1FlexGridコントロール(例:grid)を取得し、下記のような各種プロパティを設定します。
・grid.Cols(0).Visible:行ヘッダ非表示
・grid.AutoResize:列幅の自動調整
・grid.AllowEditing:編集不可
・grid.ExtendLastCol:最後の列幅を拡張
※プロジェクトにC1.Win.C1FlexGrid.RowDetails.xxx.dllへの参照を追加しておく必要があります。

以下に、ステップ5に記載した各種プロパティを設定するためのコードを記載します。
※ステップ1~4までのコードは、以下のナレッジを参照してください。
[FlexGrid for WinForms] C1FlexGridRowDetail(行詳細)を用いて、マスター/詳細形式の階層ビューを設定する方法
◎サンプルコード(VB)
主なステップは次の通りです。
1. マスター/詳細用の各データテーブルを作成し、データセットに追加します。
2. 2つのデータ間の関連(マッピング)を定義します。
3. C1FlexGridのDataSourceプロパティにデータセットを設定します。
4. C1FlexGridのRowDetailProviderプロパティに、C1FlexGridRowDetailクラスのインスタンスを割り当てます。
5. マスターグリッドの「+」をクリックした時に発生するC1FlexGrid1_ControlAddedイベントで、詳細グリッドとして内部使用されているC1FlexGridコントロール(例:grid)を取得し、下記のような各種プロパティを設定します。
・grid.Cols(0).Visible:行ヘッダ非表示
・grid.AutoResize:列幅の自動調整
・grid.AllowEditing:編集不可
・grid.ExtendLastCol:最後の列幅を拡張
※プロジェクトにC1.Win.C1FlexGrid.RowDetails.xxx.dllへの参照を追加しておく必要があります。
以下に、ステップ5に記載した各種プロパティを設定するためのコードを記載します。
※ステップ1~4までのコードは、以下のナレッジを参照してください。
[FlexGrid for WinForms] C1FlexGridRowDetail(行詳細)を用いて、マスター/詳細形式の階層ビューを設定する方法
◎サンプルコード(VB)
Private Sub C1FlexGrid1_ControlAdded(sender As Object, e As ControlEventArgs) Handles C1FlexGrid1.ControlAdded
' Detail用C1FlexGridの設定
Dim count = e.Control.Controls.Count
If count > 0 AndAlso TypeOf e.Control.Controls(count - 1) Is C1FlexGridRowDetail Then
Dim grid = DirectCast(e.Control.Controls(count - 1).Controls(0), C1FlexGrid)
grid.Cols(0).Visible = False '行ヘッダ非表示
grid.AutoResize = True '列幅の自動調整
grid.AllowEditing = False '編集不可
grid.ExtendLastCol = True '最後の列幅を拡張
End If
End Sub
◎サンプルコード(C#)
private void c1FlexGrid1_ControlAdded(object sender, ControlEventArgs e)
{
// Detail用C1FlexGridの設定
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.Cols[0].Visible = false; //行ヘッダ非表示
grid.AutoResize = true; //列幅の自動調整
grid.AllowEditing = false; //編集不可
grid.ExtendLastCol = true; //最後の列幅を拡張
}
}