MESCIUS MultiRow for Windows Forms 12.0J
列ヘッダによる行のフィルタ

ColumnHeaderCellを使用すると、ドロップダウンリストのコマンドを使用して行のフィルタ(絞り込み)を実行できます。

列ヘッダのドロップダウン

  • 仮想モードが有効のとき、フィルタは使用できません。
  • 新規行はフィルタの対象ではありません。

ドロップダウンリストの設定
ドロップダウンリストを設定するには、ColumnHeaderCell.DropDownListプロパティにHeaderDropDownListクラスのインスタンスを設定します。このとき、フィルタのコマンドを有効にするためにコンストラクタの第二引数にTrueを設定します。

Imports GrapeCity.Win.MultiRow

Dim Template1 As Template = Template.Default
Dim ColumnHeaderCell1 As ColumnHeaderCell = _
    DirectCast(Template1.ColumnHeaders(0).Cells(0), ColumnHeaderCell)
ColumnHeaderCell1.DropDownList = _
    New HeaderDropDownList("textBoxCell1", True, False)
Template1.Row.Cells("textBoxCell1").Style.BackColor = Color.Azure
GcMultiRow1.Template = Template1
using GrapeCity.Win.MultiRow;

Template template1 = Template.Default;
ColumnHeaderCell columnHeaderCell = template1.ColumnHeaders[0].Cells[0] as ColumnHeaderCell;
columnHeaderCell.DropDownList = 
    new HeaderDropDownList("textBoxCell1", true, false);
template1.Row.Cells["textBoxCell1"].Style.BackColor = Color.Azure;
gcMultiRow1.Template = template1;
フィルタ範囲の指定
フィルタ対象とする行の範囲はHeaderDropDownList.StartRowおよびHeaderDropDownList.EndRowプロパティで設定します。
値のカウント
既定の設定では、フィルタ対象となる行の範囲で、最初の1,000件までの異なる値がカウントされます。この値はDropDownAutoFilterItem.MaxCountプロパティで確認できます。DropDownAutoFilterItemクラスは、異なる値を元に動的にフィルタの候補を作成します。

フィルタのためにカウントする値を削減すると、ドロップダウンの表示にかかるパフォーマンスを改善できます。次のコードは、最初の100件までの異なる値に変更します。

Imports GrapeCity.Win.MultiRow

Dim Template1 As Template = Template.Default
Dim ColumnHeaderCell1 As ColumnHeaderCell = _
    DirectCast(Template1.ColumnHeaders(0).Cells(0), ColumnHeaderCell)
Dim HeaderDropDownList1 As HeaderDropDownList = _
    New HeaderDropDownList("textBoxCell1", True, False)
For Each item As DropDownItem In HeaderDropDownList1.Items
    If TypeOf item Is DropDownAutoFilterItem Then
        Dim dropDownAutoFilterItem As DropDownAutoFilterItem = _
            DirectCast(item, DropDownAutoFilterItem)
        dropDownAutoFilterItem.MaxCount = 100
    End If
Next
ColumnHeaderCell1.DropDownList = HeaderDropDownList1
Template1.Row.Cells("textBoxCell1").Style.BackColor = Color.Azure
GcMultiRow1.Template = Template1

' サンプル データを設定する
GcMultiRow1.AllowUserToAddRows = False
GcMultiRow1.RowCount = 200

For i As Integer = 0 To GcMultiRow1.RowCount - 1
    GcMultiRow1(i, "textBoxCell1").Value = i.ToString()
Next
using GrapeCity.Win.MultiRow;

Template template1 = Template.Default;
ColumnHeaderCell columnHeaderCell1 = template1.ColumnHeaders[0].Cells[0] as ColumnHeaderCell;
HeaderDropDownList headerDropDownList1 = new HeaderDropDownList("textBoxCell1", true, false);
foreach (DropDownItem item in headerDropDownList1.Items)
{
    if (item is DropDownAutoFilterItem)
    {
        DropDownAutoFilterItem dropDownAutoFilterItem = item as DropDownAutoFilterItem;
        dropDownAutoFilterItem.MaxCount = 100;
    }
}
columnHeaderCell1.DropDownList = headerDropDownList1;
template1.Row.Cells["textBoxCell1"].Style.BackColor = Color.Azure;
gcMultiRow1.Template = template1;

// サンプル データを設定する
gcMultiRow1.AllowUserToAddRows = false;
gcMultiRow1.RowCount = 200;

for (int i = 0; i < gcMultiRow1.RowCount; i++)
{
    gcMultiRow1[i, "textBoxCell1"].Value = i.ToString();
}
フィルタのクリア
GcMultiRow.ClearAllFiltersメソッドを使用すると、既に設定されているフィルタを一括してクリアできます。

GcMultiRow1.ClearAllFilters()
gcMultiRow1.ClearAllFilters();
フィルタのインジケータ

インジケータ画像の表示

ColumnHeaderCell.DropDownButtonImagesプロパティを使用すると、フィルタのドロップダウンボタンにインジケータの画像を設定できます。ColumnHeaderCell.DropDownButtonImagesプロパティの設定を有効にするには、ColumnHeaderCell.ShowDropDownButtonImagesプロパティをTrueに設定します。

インジケータの画像は15ピクセル×15ピクセルの枠内に表示されます。

     

  • フィルタのインジケータはズームに対応していません。
  • 15ピクセル×15ピクセルより大きい画像を設定した場合は、枠からはみ出した部分が表示されません。

 

次のコードは、フィルタが実行されたときのインジケータの画像を設定します。

Imports GrapeCity.Win.MultiRow

Dim Template1 As Template = Template.Default
Dim ColumnHeaderCell1 As ColumnHeaderCell = DirectCast(Template1.ColumnHeaders(0).Cells(0), ColumnHeaderCell)
Dim HeaderDropDownList1 As New HeaderDropDownList()
HeaderDropDownList1.Items.Add(New DropDownAutoFilterItem())

ColumnHeaderCell1.FilterCellName = "textBoxCell1"
ColumnHeaderCell1.DropDownList = HeaderDropDownList1

ColumnHeaderCell1.DropDownButtonImages.Filtered = New Bitmap("test.bmp")
ColumnHeaderCell1.ShowDropDownButtonImages = True

GcMultiRow1.Template = Template1
using GrapeCity.Win.MultiRow;

Template template1 = Template.Default;
ColumnHeaderCell columnHeaderCell1 = template1.ColumnHeaders[0].Cells[0] as ColumnHeaderCell;
HeaderDropDownList headerDropDownList1 = new HeaderDropDownList();
headerDropDownList1.Items.Add(new DropDownAutoFilterItem());

columnHeaderCell1.FilterCellName = "textBoxCell1";
columnHeaderCell1.DropDownList = headerDropDownList1;

columnHeaderCell1.DropDownButtonImages.Filtered = new Bitmap(@"test.bmp");
columnHeaderCell1.ShowDropDownButtonImages = true;

gcMultiRow1.Template = template1;

ドロップダウンボタン表示効果の無効化

インジケータの画像はフィルタのドロップダウンボタン上に表示されるため、画像を設定している場合でもドロップダウンボタンはボタンの表示効果を持っています。

例えば、マウスホバー時にはボタンの枠線がハイライト表示されたり、画像の背景を透過にしてヘッダセルの背景色を設定した場合には枠線が表示されます。

このようなボタンの表示効果を無効にするには、ColumnHeaderCell.HideDropDownButtonVisualEffectプロパティにTrueを設定します。

 

固定行をフィルタから除外
固定行をフィルタの対象から除外するには、GcMultiRow.ExcludeFreezeRowsWhenFilterプロパティにTrueを設定します。

  • GcMultiRow.ExcludeFreezeRowsWhenFilterプロパティにTrueが設定されている場合、固定行の値はフィルタのドロップダウンリストに表示されません。
次のコードは、グリッドの下部の10行をフィルタの対象から除外します。

GcMultiRow1.FreezeBottomRowCount = 10
GcMultiRow1.ExcludeFreezeRowsWhenFilter = True
gcMultiRow1.FreezeBottomRowCount = 10;
gcMultiRow1.ExcludeFreezeRowsWhenFilter = true;
複数選択フィルタ
複数選択フィルタを設定するには、ColumnHeaderCell.DropDownContextMenuStripプロパティを使用します。HeaderDropDownContextMenu.ItemsプロパティにAutoFilterToolStripItemクラスのインスタンスを設定し、ColumnHeaderCell.DropDownContextMenuStripプロパティに設定することで複数選択フィルタが使用できます。

  • DropDownContextMenuStripプロパティが空ではない場合、ColumnHeaderCell.DropDownListプロパティのフィルタの設定は無効になります。
  • DropDownContextMenuStripプロパティは、デザイナの「実行時」タブでの表示をサポートしていません。
Imports GrapeCity.Win.MultiRow

Dim TextBoxCell1 As New TextBoxCell()
TextBoxCell1.Name = "TextBoxCell1"

Dim Template1 As Template = Template1.CreateGridTemplate(New Cell() {TextBoxCell1})

Dim ColumnHeaderCell1 = DirectCast(Template1.ColumnHeaders(0).Cells(0), ColumnHeaderCell)
ColumnHeaderCell1.DropDownList = New HeaderDropDownList("TextBoxCell1", False, False)

Dim HeaderDropDownContextMenu1 As New HeaderDropDownContextMenu()
HeaderDropDownContextMenu1.Items.Add(New AutoFilterToolStripItem())

ColumnHeaderCell1.DropDownContextMenuStrip = HeaderDropDownContextMenu1
GcMultiRow1.Template = Template1
using GrapeCity.Win.MultiRow;

TextBoxCell textBoxCell1 = new TextBoxCell();
textBoxCell1.Name = "textBoxCell1";

Template template1 = Template.CreateGridTemplate(new Cell[] { textBoxCell1 });

ColumnHeaderCell columnHeaderCell1 = template1.ColumnHeaders[0].Cells[0] as ColumnHeaderCell;
columnHeaderCell1.DropDownList = new HeaderDropDownList("textBoxCell1", false, false);
template1.Row.Cells["textBoxCell1"].Style.BackColor = Color.Azure;

HeaderDropDownContextMenu headerDropDownContextMenu1 = new HeaderDropDownContextMenu();
headerDropDownContextMenu1.Items.Add(new AutoFilterToolStripItem());

columnHeaderCell1.DropDownContextMenuStrip = headerDropDownContextMenu1;
gcMultiRow1.Template = template1;
デザイナで複数選択フィルタを設定するには、次のように操作します。
  1. 複数選択フィルタを設定するセルを選択する。(例: columnHeaderCell1)
  2. プロパティウィンドウでDropDownListプロパティを選択し、「フィルタドロップダウンリスト」を選択する。
  3. プロパティウィンドウでDropDownList.CellNameプロパティを選択し、フィルタを行うセルを選択する。(例: textBoxCell1)
  4. プロパティウィンドウでDropDownContextMenuStripプロパティを選択し、「<Add New>」を選択すると、テンプレート上にHeaderDropDownContextMenuが追加される(例: headerDropDownContextMenu1)
  5. HeaderDropDownContextMenuを選択して、Itemsプロパティを選択し、[...]ボタンをクリックする。
  6. 表示された「項目コレクション エディタ」の[メンバー]リストにshowAllToolStripItem1が設定されていることを確認する。
  7. [OK]ボタンをクリックしてウィンドウを閉じる。
  8. プロジェクトを実行する。
  9. columnHeaderCell1のドロップダウンリストを表示し、複数選択フィルタが表示されることを確認する。
   
関連トピック

 

 


© MESCIUS inc. All rights reserved.