GrapeCity SPREAD for WPF 2.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 |