SPREAD for WPF 4.0J - GcSpreadGrid
コーディングによるフィルタリング
MESCIUS SPREAD for WPF 4.0J > 開発者ガイド > フィルタリング > コーディングによるフィルタリング

ユーザーによる操作ではなく、コーディングでフィルタリングできます。フィルタリングを実行するには、コントロールの FilterDescriptions プロパティでフィルタリングした列の情報のコレクションを参照し Add メソッドでフィルタリングする列の情報を表す SpreadFilterDescription を追加します。設定項目は次のとおりです。

SpreadFilterDesciption の設定項目 説明
ColumnIndex フィルタリングの基準となる列のインデックス
ColumnName フィルタリングの基準となる列の列名
Conditions フィルタリングの条件のコレクション
LogicalOperator 複数のフィルタリング条件を設定した場合、すべての条件の論理積(AND)または論理和(OR)のどちらを満たす必要があるか

複数列によるフィルタリング

複数列によりフィルタリングするには、コントロールの FilterDescriptions プロパティに複数のフィルタリングする列の情報を追加します。

サンプルコード

次のサンプルコードは「ProductCode」列および「ExpireDate」列でフィルタリングします。

C#
コードのコピー
SpreadFilterDescription sfd = new SpreadFilterDescription();
sfd.ColumnName = "ProductCode";
IncludeListCondition ilc = new IncludeListCondition();
ilc.Values.Add("0000000");
ilc.Values.Add("0000001");
sfd.Conditions.Add(ilc);
gcSpreadGrid1.FilterDescriptions.Add(sfd);

sfd = new SpreadFilterDescription();
sfd.ColumnName = "ExpireDate";
ilc = new IncludeListCondition();
ilc.Values.Add(DateTime.Today.AddDays(28));
sfd.Conditions.Add(ilc);
gcSpreadGrid1.FilterDescriptions.Add(sfd);
Visual Basic
コードのコピー
Dim sfd As New SpreadFilterDescription()
sfd.ColumnName = "ProductCode"
Dim ilc As New IncludeListCondition()
ilc.Values.Add("0000000")
ilc.Values.Add("0000001")
sfd.Conditions.Add(ilc)
GcSpreadGrid1.FilterDescriptions.Add(sfd)

sfd = New SpreadFilterDescription()
sfd.ColumnName = "ExpireDate"
ilc = New IncludeListCondition()
ilc.Values.Add(DateTime.Today.AddDays(28))
sfd.Conditions.Add(ilc)
GcSpreadGrid1.FilterDescriptions.Add(sfd)

独自の条件でフィルタリング

ConditionBase クラスを継承するクラスを作成し Evaluate メソッドをオーバーライドします。Evaluate メソッドに、独自の条件に基づくフィルタリング処理を実装します。

次のサンプルコードは、独自の条件に基づくフィルタリング処理を実装したクラスを2つ作成します。GreaterThanYearCondition クラスは、日付の年でデータをフィルタリングします。ColorCondition クラスは、セルの背景色でデータをフィルタリングします。

サンプルコード

次のサンプルコードは「ExpireDate」列を2つの条件でフィルタリングします。

C#
コードのコピー
// 背景色を設定
gcSpreadGrid1[0, "ExpireDate"].Background = new SolidColorBrush(Colors.Red);
gcSpreadGrid1[1, "ExpireDate"].Background = new SolidColorBrush(Colors.Yellow);
//「Expire」列を2つの独自条件の論理積(AND)でフィルタリング
SpreadFilterDescription filter = new SpreadFilterDescription();
filter.ColumnName = "ExpireDate";
filter.Conditions.Add(new GreaterThanYearCondition(2012, null));
filter.Conditions.Add(new ColorCondition(Colors.Red, null));
filter.LogicalOperator = ConditionLogicalOperator.And;
this.gcSpreadGrid1.FilterDescriptions.Add(filter);
C#
コードのコピー
//日付の年でフィルタリング
public class GreaterThanYearCondition : ConditionBase
{
    private int _expected;
    public GreaterThanYearCondition(object expected, string formula)
        : base(expected, null)
    {
        _expected = Convert.ToInt32(expected);
    }
    public override bool Evaluate(ICalcEvaluator evaluator, int baseRow, int baseColumn, IActualValue actual)
    {
        return (Convert.ToDateTime(actual.GetCellValue()).Year >= _expected ? true : false);
    }
}
// 背景色でフィルタリング
public class ColorCondition : ConditionBase
{
    private Color _expected;
    public ColorCondition(object expected, string formula)
        : base(expected, null)
    {
        _expected = (Color)expected;
    }
    public override bool Evaluate(ICalcEvaluator evaluator, int baseRow, int baseColumn, IActualValue actual)
    {
        return (actual.GetBackgroundColor() == Colors.Red ? true : false);
    }
}
Visual Basic
コードのコピー
' 背景色を設定
GcSpreadGrid1(0, "ExpireDate").Background = New SolidColorBrush(Colors.Red)
GcSpreadGrid1(1, "ExpireDate").Background = New SolidColorBrush(Colors.Yellow)
'「Expire」列を2つの独自条件の論理積(AND)でフィルタリング
Dim filter As New SpreadFilterDescription()
filter.ColumnName = "ExpireDate"
filter.Conditions.Add(New GreaterThanYearCondition(2012, Nothing))
filter.Conditions.Add(New ColorCondition(Colors.Red, Nothing))
filter.LogicalOperator = ConditionLogicalOperator.[And]
Me.GcSpreadGrid1.FilterDescriptions.Add(filter)
Visual Basic
コードのコピー
'日付の年でフィルタリング
Public Class GreaterThanYearCondition
    Inherits ConditionBase
    Private _expected As Integer
    Public Sub New(expected As Object, formula As String)
        MyBase.New(expected, Nothing)
        _expected = Convert.ToInt32(expected)
    End Sub
    Public Overrides Function Evaluate(evaluator As ICalcEvaluator, baseRow As Integer, baseColumn As Integer, actual As IActualValue) As Boolean
        Return (If(Convert.ToDateTime(actual.GetCellValue()).Year >= _expected, True, False))
    End Function
End Class
' 背景色でフィルタリング
Public Class ColorCondition
    Inherits ConditionBase
    Private _expected As Color
    Public Sub New(expected As Object, formula As String)
        MyBase.New(expected, Nothing)
        _expected = DirectCast(expected, Color)
    End Sub
    Public Overrides Function Evaluate(evaluator As ICalcEvaluator, baseRow As Integer, baseColumn As Integer, actual As IActualValue) As Boolean
        Return (If(actual.GetBackgroundColor() = Colors.Red, True, False))
    End Function
End Class
関連トピック