GUIの作成
これまで作成したウィンドウに、2つのCheckBoxコントロールを追加し、Checked/Uncheckedイベントハンドラを追加します。
なお、C1FlexGridコンポーネントの概要については、『独自の入力グリッドを持ったWPFアプリケーションの作成』を参照ください。
セルのマージ
C1FlexGridコントロールの優れている点は、多くの優秀な機能があらかじめコントロールに組み込まれており、メンバメソッドとプロパティを使ってこれらの機能を簡単に使うことができる点です。
自分でコードを書くとなると、とても大変で膨大な作業量になってしまいますが、C1FlexGridコントロールではメンバメソッドやプロパティを呼び出す式を書くだけで済みます。グリッドのセルの結合(マージ)もあらかじめC1FlexGridコントロールに組み込まれており、この機能を使うかどうかと、どこのセルを結合するのかを指定するだけで、グリッド内のセルを自由に結合させることができます。
使い方は簡単で、まずC1FlexGridコントロールの「AllowMerging」プロパティをTrueに設定し、グリッドレベルのセル結合機能を有効にします。設定値は「AllowMerging列挙体」のメンバで、以下の設定値を使用します。ここでは、セルを結合するので「Cells」を選びます。
メンバ名 | 説明 |
None | 結合しない |
Cells | スクロール可能なセルを結合 |
ColumnHeaders | 列ヘッダーを結合 |
RowHeaders | 行ヘッダーを結合 |
AllHeaders | 列ヘッダーと行ヘッダーを結合 |
All | すべての領域を結合 |
Rows/Columnsプロパティで結合したいセルの方向を行列単位で指定します。そして、それらのセルの「AllowMerging」プロパティをTrueに設定すると、指定した行および列のセルを結合します。
ここでは、同じカテゴリ名のセルを列単位で結合するため、Columnsプロパティに「CategoryName」を指定し、「AllowMerging」プロパティをTrueにします。カテゴリ名でグループ化していなければ、隣接する同じカテゴリ名のセルが結合されます。グループ化が実行されれば、そのまま同じカテゴリ名のセルが1つのセルに結合されます。セルの結合を解除する場合は、AllowMergingプロパティの値に「AllowMerging.None」を設定します。
Private Sub CheckBox2_Checked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CheckBox2.Checked 'セルのマージモードを設定 C1FlexGrid1.AllowMerging = AllowMerging.Cells 'カテゴリ名でセルを結合 C1FlexGrid1.Columns("CategoryName").AllowMerging = True C1FlexGrid1.Columns("CategoryName").Foreground = New SolidColorBrush(Colors.MediumSeaGreen) End Sub Private Sub CheckBox2_Unchecked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CheckBox2.Unchecked 'セルの結合を解除 C1FlexGrid1.AllowMerging = AllowMerging.None C1FlexGrid1.Columns("CategoryName").Foreground = New SolidColorBrush(Colors.Black) End Sub
private void checkBox2_Checked(object sender, RoutedEventArgs e) { //セルのマージモードを設定 C1FlexGrid1.AllowMerging = AllowMerging.Cells; //カテゴリ名でセルを結合 C1FlexGrid1.Columns["CategoryName"].AllowMerging = true; C1FlexGrid1.Columns["CategoryName"].Foreground = new SolidColorBrush(Colors.MediumSeaGreen); } private void checkBox2_Unchecked(object sender, RoutedEventArgs e) { //セルの結合を解除 C1FlexGrid1.AllowMerging = AllowMerging.None; C1FlexGrid1.Columns["CategoryName"].Foreground = new SolidColorBrush(Colors.Black); }