True DBGrid for WinForms
マージ

基礎グリッドデータをソートした場合に、ソートされた列内で隣接する同じ値のセルをグループ化することによって、データを読みやすく表示できます。C1DisplayColumn オブジェクトのMerge プロパティは、このようなデータセルをグループ化して、単一の編集可能なセルを形成するかどうかを制御します。デフォルトでは、このプロパティの値は None で、列内の各物理行ごとにデータ値が表示されます(データ値がある場合)。

[Country]フィールドを基準にしてソートされている次のグリッドを例に説明します。

実行時に Country 列でデータ依存型のセルマージを有効にすると、コンテンツに基づいてセルがグループ化されます。

C#
コードのコピー
this.c1TrueDBGrid1.Splits[0].DisplayColumns["Country"].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free;                  

この文を実行すると、次のように表示されます。現在のセルが [会社名]列内にある場合、マーキーは同じ値を持つすべての行にまたがりMarqueeStyle プロパティの設定に関係なく、外見は点線の四角形になります。ただし、他の列のマーキーの動作には影響しません。

設計時のレイアウトを指定する場合、C1DisplayColumnCollection エディタで目的の C1DisplayColumn オブジェクトの Merge プロパティを設定することによって、同様の効果を得ることができます。このプロパティには SplitCollection エディタで DisplayColumns プロパティの右の省略記号をクリックしてアクセスできます。


Merge プロパティは Free または Restricted に設定できます。Free に設定すると隣接する行の類似値がマージされ、Restricted に設定すると、前列でマージされている範囲内で、隣接する行の類似値がマージされます。Free および Restricted の設定の違いは、同じコンテンツ内のセルを常にマージするか(Free)、左に隣接するセルだけを結合するかです。次の例にこの違いを示します。

マージなし(通常のスプレッドシートビュー)

No merge displays data in a regular spreadsheet view.

C#
コードのコピー
this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.None;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.None;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[2].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.None;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[3].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.None                   

Free マージ

Free merge combines like values in adjacent rows.

Notice how the first Region cell (East) merges across employees (Donna and John) to its left.

C#
コードのコピー
// フリーマージ
this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[2].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[3].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.Free;
 
// すべての列の垂直方向の配置を Center に設定
this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].Style.VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[2].Style.VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[3].Style.VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center;

Restricted マージ

Restricted merge combines like values in adjacent rows in the same row span as the previous column.

Notice how the first Region cell (East) no longer merges across employees to its left.

C#
コードのコピー
// 制限付きマージ
this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.Restricted;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.Restricted;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[2].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.Restricted;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[3].Merge = C1.Win.C1TrueDBGrid.ColumnMergeEnum.None;
 
// すべての列の垂直方向の配置を Center に設定
this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Style.VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[1].Style.VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[2].Style.VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center;
this.c1TrueDBGrid1.Splits[0].DisplayColumns[3].Style.VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center;

列の Merge プロパティが Free または Restricted に設定されている場合は、すべての行に一意の値が含まれている場合でも、すべてのデータセルを編集できません。例外は、AddNew 行だけです。ただし、一度新しい行が基底のデータベースに追加されると、マージされた列内ではそのデータも編集できなくなります。

メモ: 結合されたセルに表示するものは、テキストに限定されません。 テキストから画像への変換を指定するで説明したように、ValueItems オブジェクトを挿入することによって、ビットマップを表示することもできます。画像をグリッドの要素に適用するの項では、Style オブジェクトを使ってセル内にグラフィックをより柔軟に表示する方法について説明しています。

マージされたセルを書式設定する

列の Style オブジェクトの HorizontalAlignment および VerticalAlignment プロパティを使用して、次の図のように、マージされたセルのデータを中央に配置します。

SplitsCollection エディタでは、Merge プロパティと同じツリー レベルにある Style プロパティノードを拡張して、これらのプロパティにアクセスできます。または、次のコードを使用します。

C#
コードのコピー
C1.Win.C1TrueDBGrid.Style s;
s = this.c1TrueDBGrid1.Splits[0].DisplayColumns["Country"].Style;
s.HorizontalAlignment = C1.Win.C1TrueDBGrid.AlignHorzEnum.Center;
s.VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center;