フィルターと並び替え

指定した複数の列にフィルターを追加できます。フィルターで選択した項目によってデータをチェックし、対象となる行のみの表示ができます。また、データの並び替えもできます。 ja76

フィルターを作成した後、ReoGrid が自動的に列のヘッダーにドロップダウンボタンを追加します。また、選択項目リストも各列のデータに基づいて作成します。

フィルターを作成

フィルターを作成するにはワークシートのメソッド CreateColumnFilter を利用します。このメソッドは様々なパラメータの組み合わせで呼び出せます。

指定した範囲をフィルターする

指定した範囲のデータに基づいてフィルターしたい場合、 データ範囲を指定してフィルターを作成します。 ja77

範囲C3:G7をフィルターの対象範囲とします。

sheet.CreateColumnFilter(new RangePosition("C3:G7"));

指定した複数の列にフィルターを作成

ワークシートの全ての行をフィルター対象とする場合、指定した複数の列でフィルターを作成できます。 ja78

A列からG列まで、すべての行をフィルターの対象範囲とします。

sheet.CreateColumnFilter("A", "G");    // AとGは列の番号

指定した複数の列、タイトル行を除いて全てのセルをフィルターする

ja87

1行目はタイトル行のため、フィルター対象としません。三つ目のパラメータはタイトル行の数ですので、1を渡します。

sheet.CreateColumnFilter("A", "G", 1);    // 三つ目のパラメータはタイトル行の数

プログラムでフィルターを適用

画面上でフィルターの項目を選択するとフィルターを適用することができます。プログラムでフィルターを適用したい場合、フィルターのインスタンスの Apply メソッドを利用します。

// フィルターのインスタンスを取得
var filter = sheet.CreateColumnFilter("A", "G");

// G列の選択項目を設定
filter.Columns["G"].SelectedTextItems.AddRange(new string[] { "築地", "豊海町", "日本橋" });

// フィルターを適用
filter.Apply();

ja80

フィルターのイベント

ワークシートにフィルターを適用した場合、ワークシートのイベント RowsFiltered が発生します。

フィルターの選択された項目を取得

フィルターを作成した際のインスタンスを利用し、そのインスタンスの Columns プロパティから各列の選択項目を確認できます。

// フィルターを作成
var filter = sheet.CreateColumnFilter(0, 5, 1);

// フィルターのイベントを処理
sheet.RowsFiltered += (s, e) =>
{
  for (int i = 0; i < filter.ApplyRange.Cols; i++)
  {
    if (filter.Columns[i].SelectedTextItems.Count > 0)
    {
      // 列のコードを取得
      var columnCode = RGUtility.GetAlphaChar(filter.ApplyRange.Col + i);

      // メッセージを表示
      MessageBox.Show(columnCode + "列がフィルター適用中");
    }
  }
};

ja86

並び替え

画面にフィルターを作成した場合、ドロップダウンパネルにある昇順と降順の並び替えのメニューで、対象セルの並び順を変えられます。 ja82

並び替えメニューの表示文言を変更

並び替えメニューの文言を自由に変更できます。

LanguageResource.Filter_SortAtoZ = "昇順(&S)";
LanguageResource.Filter_SortZtoA = "降順(&O)";

ja83

プログラムでデータを並び替え

画面のフィルターに依存せず、ワークシートのメソッド SortColumn を利用してもデータの並び替えができます。

// C列のデータを降順で並び替え
worksheet.SortColumn("C", SortOrder.Descending);

パラメータの意味は以下の通りです。

  1. 並び替えの対象列です。数字のインデントまたは文字列のコードで指定できます
  2. 昇順または降順を指定します。昇順の場合 Ascending を渡します;降順の場合 Descending を渡します

指定した範囲のデータを並び替え

指定した範囲内のデータだけ並び替えをしたい場合、対象範囲を SortColumn メソッドに渡します。

// 画面にデータを準備
sheet["A1"] = new object[,] {
  { "番号", "商品名", "商品コード", "入荷日", "数量", "管理コード" },
  { 1, "ダイエットゼリー", "D025", "5/4", 3, "D025-04" },
  { 2, "スリムキャンデー", "S144", "5/7", 2, "S144-07" },
  { 3, "ヤセクリーム", "Y903", "5/11", 2, "Y903-11"},
  { 4, "ダイエットゼリー", "D025", "5/12", 3, "D025-12" },
  { 5, "ダイエットゼリー", "D025", "5/17", 2, "D025-17" },
  { 6, "ヘルシークッキー", "HC10", "5/19", 1, "HC10-19" },
};

ja84

「数量」の列に基づいてデータの並び替えを行います。

sheet.SortColumn(4, "B2:F7", SortOrder.Descending);

ja85

並び替えの対象範囲はB2:F7なので、タイトル行と番号列は変更されていません。

並び替えのイベント

データの並び替えが行われた場合、ワークシートのイベント RowsSorted イベントが発生します。

デモプログラム

デモプログラムはデモプロジェクトにあります。ソースコードは \worksheet\ColumnFilterAndSortDemo.cs にあります。


ページの内容は役に立ちましたか?