FlexPivot for WinForms
条件付き書式設定の適用
データブレンド機能 > 条件付き書式設定の適用

条件付き書式設定は、セルの値に基づいて特定の色でセルを強調表示します。FlexPivotGrid コントロールでは、条件付き書式設定を個々のセルまたはセル範囲に適用することで、データをよりわかりやすく視覚化して分析や比較を行うことができます。C1FlexPivotGrid クラスは、C1FlexGrid の OwnerDraw 機能からこの機能を拡張しています。

地理(都市や国)に基づいて、製品の売上の変化を分析するとします。製品の売上が 100 未満の都市を調べて、今後価格を調整できるようにするためです。それには、条件付き書式設定を適用し、売上を強調表示して比較します。

次の図は、製品、国、都市別に分けて 100 を超える売上を強調表示した FlexPivotGrid です。

実装

C1FlexPivotGrid に条件付き書式設定を適用するには、次の手順を実行します。この実装は、「コードによるデータソースへの FlexPivot の連結」トピックで作成したサンプルを使用します。

  1. CellStyle クラスのインスタンスを作成し、コードビューで定数フィールド[値]を 100 に初期化します。
    Private cellValue As CellStyle
    Const Value As Integer = 100
    
    CellStyle cellValue;
    const int Value = 100;
    
  2. フォームのコンストラクタに次のコードを追加して、Extended Price が[値]リスト、Product Name が[列]リスト、CityCountry フィールドが[列]リストに表示されるデフォルトビューを作成します。
    Dim fp = Me.FlexPivotPage1.PivotEngine
    fp.ValueFields.Add("ExtendedPrice")
    fp.RowFields.Add("Country", "City")
    fp.ColumnFields.Add("ProductName")
    
    var fp = this.c1FlexPivotPage1.PivotEngine;
    fp.ValueFields.Add("ExtendedPrice");
    fp.RowFields.Add("Country", "City");
    fp.ColumnFields.Add("ProductName");
    
  3. フォームのコンストラクタに次のコードを追加して、グリッドの設定とグリッドセルのスタイル設定を行います。
    ' グリッドを構成する
    Dim grid = Me.c1FlexPivotPage1.FlexPivotGrid
    
    ' 「最大値」を表示するためのスタイル。
    cellValue = grid.Styles.Add("cellValue")
    cellValue.BackColor = Color.LightGreen
    
    ' スタイルを適用するためのオーナー描画。
    grid.DrawMode = DrawModeEnum.OwnerDraw
    
    // グリッドを構成する。
    var grid = this.c1FlexPivotPage1.FlexPivotGrid;
    
    //「最大値」を表示するためのスタイル。
    cellValue = grid.Styles.Add("cellValue");
    cellValue.BackColor = Color.LightGreen;
    
    // スタイルを適用するためのオーナー描画。
    grid.DrawMode = DrawModeEnum.OwnerDraw;
    
  4. grid_OwnerDrawCell イベントをサブスクライブして、条件付き書式設定を適用します。
    AddHandler grid.OwnerDrawCell, AddressOf grid_OwnerDrawCell
    
    grid.OwnerDrawCell += grid_OwnerDrawCell;
    
  5. grid_OwnerDrawCell イベントに対して作成されたイベントハンドラに次のコードを追加します。
    Private Sub grid_OwnerDrawCell(sender As Object, e As OwnerDrawCellEventArgs)
        Dim grid = TryCast(sender, C1.Win.C1FlexGrid.C1FlexGrid)
        If e.Row >= grid.Rows.Fixed AndAlso e.Col >= grid.Cols.Fixed AndAlso TypeOf grid(e.Row, e.Col) Is Double Then
            Dim value__1 = CDbl(grid(e.Row, e.Col))
            If value__1 > Value Then
                e.Style = cellValue
            End If
        End If
    End Sub
    
    private void grid_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
    {
        var grid = sender as C1.Win.C1FlexGrid.C1FlexGrid;
        if (e.Row >= grid.Rows.Fixed &&
            e.Col >= grid.Cols.Fixed &&
            grid[e.Row, e.Col] is double)
        {
            var value = (double)grid[e.Row, e.Col];
            if (value > Value)
            {
                e.Style = cellValue;
            }
        }
    }
    
  6. アプリケーションを実行して、100 を超える売上が緑色で強調表示されていることを確認します。