UltraGrid 外の操作パネルで UltraGrid をフィルターしたい場合は、

  • 操作パネルを置く。
    • ここはご自由に準備してください。
  • 操作パネルの操作に応じて UltraGrid をコードでフィルターする。
    • UltraGrid の DisplayLayout の Band の ColumnFilters[“列名”] の FilterConditions コレクションに対して、フィルター条件を追加・更新・削除することでコードでフィルターすることができます。

で可能です。

例えば、次のスクリーンショットのように UltraGrid の上に置いた都道府県のチェックボックスのオン / オフでグリッドのデータをフィルターしたいとします。

 

各チェックボックスに対してイベントハンドラーを追加し、

// checkBox1は都道府県用の7個のチェックボックスのうちの1つという想定。同じようにほかの都道府県用のチェックボックスにもベントハンドラーを追加します。
checkBox1.CheckedChanged += prefectureCheckBox_CheckedChanged;

 

チェックボックスによるフィルター条件を更新する実装をします。

private void prefectureCheckBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox checkBox = (CheckBox)sender;
    updateCheckBoxFilter("Prefecture", checkBox, checkBox.Text);
}

private void updateCheckBoxFilter(String columnName, CheckBox checkBox, string value)
{
    if (!checkBox.Checked)
    {
        // valueと等しいデータを除外するフィルターを設定する。
        ultraGrid1.DisplayLayout.Bands[0].ColumnFilters[columnName].FilterConditions.Add(FilterComparisionOperator.NotEquals, value);
    }
    else
    {
        // 除外フィルター設定がされていたらそれを削除する。
        FilterCondition[] filterConditions = new FilterCondition[ultraGrid1.DisplayLayout.Bands[0].ColumnFilters[columnName].FilterConditions.Count];
        ultraGrid1.DisplayLayout.Bands[0].ColumnFilters[columnName].FilterConditions.CopyTo(filterConditions, 0);
        var filterCondition = filterConditions.FirstOrDefault(condition => condition.CompareValue.ToString() == value);
        if (filterCondition != null)
        {
            ultraGrid1.DisplayLayout.Bands[0].ColumnFilters[columnName].FilterConditions.Remove(filterCondition);
        }
    }
}

 

実行結果

例: 東京都と千葉県のチェックボックスのみチェックした場合。東京都と千葉県のみが表示され、それ以外はフィルターされました!

 

サンプル

 

API リファレンス

 

Tagged:

製品について

Ultimate UI for Windows Forms