カスタマイズ条件フィルター

概要

カスタマイズ条件フィルターは複数条件の組み合わせによってデータをフィルタリングする機能です。 カスタマイズ条件フィルターで列のIDを比較部として利用できます。列ベースデータソースの詳細についてこちらを参照してください。

フィルターのインターフェイス

Interface ICondition {
  String ColumnID;                // カラムID
  ConditionOperator Operator;     // 比較方法(演算子)
  Object Value;                   // 値(上記種類の1つ)
  Boolean IsEnabled;              // 有効/無効
}

比較演算子

比較方法相当する演算子対象値の種類
指定の値に等しい==任意?
指定の値に等しくない!=任意?
指定の値で始まる~*文字列
指定の値で終わる*~文字列
指定の値を含む~文字列
指定の値を含まない!~文字列
指定の値より大きい>数字、日付
指定の値以上>=数字、日付
指定の値より小さい<数字、日付
指定の値以下<=数字、日付
指定の集合に含まれるIN配列(要素の型は任意?)

値の種類

  • 文字列 ""
  • 数値 12345.12
  • 配列 .NET型 ArrayList
  • 日付 2021/5/12

使用例

条件の作成・追加

// 条件フィルターを作成
var filter = new ConditionalDataFilter();

// 通貨 != USD 条件を作成
var condition = new FilterCondition(ColumnId, ConditionOperator.NotEquals, "USD");

// 条件リストに追加
filter.Conditions.Add(condition);

データソースを作成

条件フィルターを利用するには、条件フィルター用のデータソース ColumnBasedDataSource を作成する必要があります。

ColumnBasedDataSource は格納するデータに対して列を定義することができます。列の識別子は文字列の ID です。

// データソースを作成
var ds = new ColumnBasedDataSource();

// 列を定義
ds.Columns.AddRange("id", "tsuka", "kamoku", "baibai", "zengaku", "hiduke", "biko");

// データを格納
for (int r = 0; r < 30; r++)
{
  var record = ds.Records.AppendNew();

  // ID
  record["id"] = 15001;
  // 通貨
  record["tsuka"] = "USD";
  // 科目
  record["kamoku"] = "015";
  // 売買
  record["baibai"] = "売";
  // 全額
  record["zengaku"] = 105800;
  // 日付
  record["hiduke"] = new DateTime(2020, 11, 1);
  // 備考
  record["biko"] = "...";
}

データソースをワークシートに追加

// データソースをワークシートに追加、 A1:G30 は格納先の範囲アドレス
sheet.AddDataSource("A1:G30", ds);

フィルターを作成

Filter = new ConditionalDataFilter();

フィルターが応用された場合、ワークシートのデータを更新するようにイベント処理を追加:

Filter.OnApply += (s, e) => sheet.DoFilter("A1:G30", Filter);

渡した範囲アドレス A1:G30 はデータソースを追加した際に指定した範囲と一致する必要があります。

フィルターを適用

UIで条件を変更して、フィルターの Apply メソッドを呼び出すとワークシートが更新されます。

filter.Apply();