在XAF中,有很多种附加过滤条件的方法,列举如下:
1.在Application Model的ListView的Criteria节点内写入筛选信息,如图1所示。该过滤条件会以"ListViewCriteria"为键名放入ListVIew.CollectionSource.Criteria字典中。
图1
2.在Application Model的ListView的Filters节点下创建过滤节点ListViewFilter,写入过滤条件,如图2所示。该过滤条件以"ListViewFilter"为键名最终也放入了ListView.CollectionSource.Criteria字典中。
图2
3.运行时FullTextSearch按钮生成的过滤条件,如图3,它也是以"FullTextSearchCriteria"作为键名放入ListView.CollectionSource.Criteria字典中。
图3
4.也是最常用的一种,运行时直接在ListView.CollectionSource.Criteria字典中添加过滤:
ListView lv = View as ListView;
lv.CollectionSource.Criteria["runtime"] = new BinaryOperator("Text", "CollectionSource Criteria Dictionary", BinaryOperatorType.Like);
5.运行时,使用Filter Editor添加的过滤,如图4所示。该过滤条件保存在GridListEditor.GridView.FilterInfo中。
图4
因此,获得ListView的全部的过滤条件的方法,就是把ListView.CollectionSource.Criteria和GridView中全部的过滤条件提取出来就可以了,如下代码所示:
public CriteriaOperator GetAllFilters(ListView view)
{
XafGridView grid = (view.Editor as GridListEditor).GridView;
CriteriaOperator filter = new GroupOperator(GroupOperatorType.And,view.CollectionSource.Criteria.Values);
filter = new GroupOperator(GroupOperatorType.And, filter, grid.ActiveFilterCriteria);
return filter;
}