作成日: 2023/02/02 最終更新日: 2023/02/02
文書種別
使用方法
詳細
C1FlexGridRowDetailクラスを使って作成できるマスター/詳細形式の階層ビューは、基本的には3階層には対応していません。
代替策として、親の階層グリッドの詳細行(C1FlexGridRowDetail)に、さらに、C1FlexGridRowDetailクラスを使った階層グリッドを配置することで、3階層を実現する方法が考えられます。
以下のコードでは、C1FlexGridRowDetailを継承した「customFlexGridRowDetail」コントロールを作成して、カスタムコントロールとして使用しています。
※プロジェクトにC1.Win.C1FlexGrid.RowDetails.xxx.dllへの参照を追加しておく必要があります。
※本ナレッジに、サンプルプロジェクト(C#)を添付しますので、ご参照ください。
◎添付ファイル:prj_C1FlexGrid_RowDetails.zip

◎サンプルコード(C#、抜粋)
代替策として、親の階層グリッドの詳細行(C1FlexGridRowDetail)に、さらに、C1FlexGridRowDetailクラスを使った階層グリッドを配置することで、3階層を実現する方法が考えられます。
以下のコードでは、C1FlexGridRowDetailを継承した「customFlexGridRowDetail」コントロールを作成して、カスタムコントロールとして使用しています。
※プロジェクトにC1.Win.C1FlexGrid.RowDetails.xxx.dllへの参照を追加しておく必要があります。
※本ナレッジに、サンプルプロジェクト(C#)を添付しますので、ご参照ください。
◎添付ファイル:prj_C1FlexGrid_RowDetails.zip
◎サンプルコード(C#、抜粋)
private void Form1_Load(object sender, EventArgs e)
{
// データセットの作成
var dataSet = CreateDataA();
// データバインドの設定
c1FlexGrid1.DataSource = dataSet;
c1FlexGrid1.DataMember = "Parent";
// 親グリッドの詳細行の設定
c1FlexGrid1.RowDetailProvider = (g, r) => new customFlexGridRowDetail(c1FlexGrid1);
// FlexGridの設定
c1FlexGrid1.AutoGenerateColumns = false;
c1FlexGrid1.AreRowDetailsFrozen = false;
c1FlexGrid1.Cols[1].Width = 200;
// 列の構成
ConfigureColumns(dataSet);
c1FlexGrid1.AllowResizing = AllowResizingEnum.Both;
}
・・・(途中省略)・・・
public class customFlexGridRowDetail : C1FlexGridRowDetail
{
private DataSet _dataSet;
private string _dataMember;
public customFlexGridRowDetail(C1FlexGrid parentGrid) : base()
{
object dataSource = parentGrid.DataSource;
if (dataSource is DataSet)
{
_dataSet = dataSource as DataSet;
// 子グリッド用テーブル
var parentTable = _dataSet.Tables["Parent"];
// 孫グリッド用テーブル
var childTable = parentTable.ChildRelations[0].ChildTable;
_dataMember = childTable.TableName;
}
}
public override void Setup(C1FlexGrid parentGrid, int rowIndex)
{
base.Setup(parentGrid, rowIndex);
if (rowIndex >= parentGrid.Cols.Count)
{
return;
}
var dataSource = parentGrid.Cols[rowIndex];
C1FlexGrid.AutoGenerateColumns = false;
C1FlexGrid.DataSource = dataSource;
C1FlexGrid.DataMember = _dataMember;
C1FlexGrid.Cols[1].Width = 150; //列幅の設定
// 子グリッドの詳細行の設定
if (_dataSet != null && _dataSet.Tables[_dataMember].ChildRelations.Count != 0)
{
C1FlexGrid.RowDetailProvider = (g, r) => new customFlexGridRowDetail(C1FlexGrid);
}
}
private void InitializeComponent()
{
((System.ComponentModel.ISupportInitialize)(this.C1FlexGrid)).BeginInit();
this.SuspendLayout();
//
// C1FlexGrid
//
this.C1FlexGrid.ColumnPickerInfo.SearchMode = C1.Win.C1FlexGrid.ColumnPickerSearchMode.None;
this.C1FlexGrid.ColumnPickerInfo.ShowColumnMenuItem = false;
this.C1FlexGrid.ColumnPickerInfo.ShowToolButton = false;
//
// customFlexGridRowDetail
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.Name = "customFlexGridRowDetail";
((System.ComponentModel.ISupportInitialize)(this.C1FlexGrid)).EndInit();
this.ResumeLayout(false);
}
}