今日はプロジェクトの最後のソースであるFilterDataGridについて
FilterDataGridはDataGridを継承したクラスで、フィルタ処理に必要ないくつかのクラスやプロパティを追加したもの。
複数のフィルタ条件を格納するためのGroupFilterなどを定義している。
これまで公開したソースを合わせるとExcelのようなフィルタ処理が可能なDataGridができる。
※Excelのフィルタ機能に近づけるにはもっと機能を追加する必要はあるが・・・。
ちなみにフィルタだけではなくDataGridTextColumnが標準で実装しているソート機能もそのまま利用することができる。
FilterDataGrid.cs
public class FilterDataGrid : DataGrid
{
// 最後にフィルタをかけた列のフィルタ対象のチェックボックスリストを作成するときはViewを利用しないようにする
public DataGridFilterTextColumn LastFilterColumn = null;
public List<DataGridFilterTextColumn> FilteredColumns = new List<DataGridFilterTextColumn>();
public GroupFilter _filters = new GroupFilter();
public GroupFilter Filters { get { return _filters; } set { _filters = value; } }
/// <summary>
/// 複数のフィルタを適用するためのクラス
/// Filterを適用するときに変数に格納しておく
/// </summary>
public class GroupFilter
{
private List<Predicate<object>> _filters;
public Predicate<object> Filter { get; private set; }
public GroupFilter()
{
_filters = new List<Predicate<object>>();
Filter = InternalFilter;
}
private Dictionary<DataGridFilterTextColumn, Predicate<object>> ColumnPairPredicateList = new Dictionary<DataGridFilterTextColumn, Predicate<object>>();
private bool InternalFilter(object o)
{
foreach (var filter in _filters)
{
if (!filter(o))
{
return false;
}
}
return true;
}
public void AddFilter(Predicate<object> filter, DataGridFilterTextColumn column)
{
_filters.Add(filter);
ColumnPairPredicateList.Add(column, filter);
}
public void RemoveFilterByColumn(DataGridFilterTextColumn column)
{
if (ColumnPairPredicateList.ContainsKey(column))
{
RemoveFilter(ColumnPairPredicateList[column]);
ColumnPairPredicateList.Remove(column);
}
}
private void RemoveFilter(Predicate<object> filter)
{
if (_filters.Contains(filter))
{
_filters.Remove(filter);
}
}
}
今日はここまで。
登録:
コメントの投稿 (Atom)
PowerShellでEdgeを自動化(インストール不要。参考:郵便追跡サービス自動操作)
1.経緯について RPAのソフトをインストールできないので、これまでVBSでCreateObjectでブラウザの自動操作をすることがたまにあった。 ※いざというときの手札として持っているだけで安心感が段違い 見た目上IEがインストールされていなくても、CreateObject...
-
TreeListView上でコンボボックスを利用するときにフォーカスのあるコンボボックスの色をイベントで変えようとしたけど上手くいかなかった。 色々と調べているとXaml側のテンプレートをいじる必要があるみたいだったので、いろいろとやってみた。 とりあえず、コンボボックス...
-
サイトに自動でログインするVBSのソース 事前に対象のWebサイトを開いて、F12キーを押下して、要素の名前を調べておく。 ※Edge、Chromeなどのブラウザ objIE.Visible = Trueの部分を objIE.Visible = Falseにしておけば...
-
開発中のプログラムがあまり進んでないのでSQLの小ネタ。 昔、よくあった遅いSQLの改善方法について、記載。 インデックスを張ったりするのもいいけど、SQLを作るときにデータをたくさん持ってきてまとめて条件分岐をCASE式でするだけで 圧倒的に速度が改善できる。 例えば...
0 件のコメント:
コメントを投稿