フィルターと並び替え
指定した複数の列にフィルターを追加できます。フィルターで選択した項目によってデータをチェックし、対象となる行のみの表示ができます。また、データの並び替えもできます。
フィルターを作成した後、ReoGrid が自動的に列のヘッダーにドロップダウンボタンを追加します。また、選択項目リストも各列のデータに基づいて作成します。
フィルターを作成
フィルターを作成するにはワークシートのメソッド CreateColumnFilter
を利用します。このメソッドは様々なパラメータの組み合わせで呼び出せます。
指定した範囲をフィルターする
指定した範囲のデータに基づいてフィルターしたい場合、 データ範囲を指定してフィルターを作成します。
範囲C3:G7をフィルターの対象範囲とします。
sheet.CreateColumnFilter(new RangePosition("C3:G7"));
指定した複数の列にフィルターを作成
ワークシートの全ての行をフィルター対象とする場合、指定した複数の列でフィルターを作成できます。
A列からG列まで、すべての行をフィルターの対象範囲とします。
sheet.CreateColumnFilter("A", "G"); // AとGは列の番号
指定した複数の列、タイトル行を除いて全てのセルをフィルターする
1行目はタイトル行のため、フィルター対象としません。三つ目のパラメータはタイトル行の数ですので、1を渡します。
sheet.CreateColumnFilter("A", "G", 1); // 三つ目のパラメータはタイトル行の数
プログラムでフィルターを適用
画面上でフィルターの項目を選択するとフィルターを適用することができます。プログラムでフィルターを適用したい場合、フィルターのインスタンスの Apply
メソッドを利用します。
// フィルターのインスタンスを取得
var filter = sheet.CreateColumnFilter("A", "G");
// G列の選択項目を設定
filter.Columns["G"].SelectedTextItems.AddRange(new string[] { "築地", "豊海町", "日本橋" });
// フィルターを適用
filter.Apply();
フィルターのイベント
ワークシートにフィルターを適用した場合、ワークシートのイベント 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 + "列がフィルター適用中");
}
}
};
並び替え
画面にフィルターを作成した場合、ドロップダウンパネルにある昇順と降順の並び替えのメニューで、対象セルの並び順を変えられます。
並び替えメニューの表示文言を変更
並び替えメニューの文言を自由に変更できます。
LanguageResource.Filter_SortAtoZ = "昇順(&S)";
LanguageResource.Filter_SortZtoA = "降順(&O)";
プログラムでデータを並び替え
画面のフィルターに依存せず、ワークシートのメソッド SortColumn
を利用してもデータの並び替えができます。
// C列のデータを降順で並び替え
worksheet.SortColumn("C", SortOrder.Descending);
パラメータの意味は以下の通りです。
- 並び替えの対象列です。数字のインデントまたは文字列のコードで指定できます
- 昇順または降順を指定します。昇順の場合
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" },
};
「数量」の列に基づいてデータの並び替えを行います。
sheet.SortColumn(4, "B2:F7", SortOrder.Descending);
並び替えの対象範囲はB2:F7なので、タイトル行と番号列は変更されていません。
並び替えのイベント
データの並び替えが行われた場合、ワークシートのイベント RowsSorted
イベントが発生します。
デモプログラム
デモプログラムはデモプロジェクトにあります。ソースコードは \worksheet\ColumnFilterAndSortDemo.cs
にあります。