下图所示,如何获取 Label Filter 和 Value Filter ?
上次提到过 RadPivotFieldList 需要绑定 DataProvider = LocalDataSourceProvider,要获取 filter 需要用到 dataProvider 里面的属性了。
LocalDataSourceProvider PivotDataSrcProvider ,取 Row Labels 里面的 Filter 代码如下,Column Labels 里面的 Filter 是相似的,只是换个集合:
foreach (var rg in PivotDataSrcProvider.RowGroupDescriptions)
{
if (rg.GroupFilter != null)
{
if (rg.GroupFilter is LabelGroupFilter)
{
var filter = rg.GroupFilter as LabelGroupFilter;
var itemsFilterCondition = (Telerik.Pivot.Core.Filtering.ItemsFilterCondition)filter.Condition;
// Label Filter 里面分为 2 个部分,见上图 Label Filter,取 Filter 时要分开取
// 这里说明一下 2 个部分中的关键属性:
// DistinctCondition.Comparison(枚举,包括 Includes / DoesNotInclude),Items(列表中的数据)
// Condition 根据 ComboBox 选择的不同有不同的类型,
// 1. TextCondition,
// Comparison(枚举,包括 Contains / DoesNotContain / BeginsWith / DoesNotBeginWith / EndsWith / DoesNotEndWith),
// Pattern(TextBox 的值,string 类型),
// IgnoreCase(Checkbox,bool 类型)
// 2. ComparisonCondition,
// Condition(枚举,包括 IsGreaterThanOrEqualTo / IsGreaterThan / Equals / DoesNotEqual / IsLessThan / IsLessThanOrEqualTo),
// Than(TextBox 的值,object 类型),
// IgnoreCase(Checkbox,bool 类型)
// 3. IntervalCondition,
// Condition(枚举,包括 IsBetween / IsNotBetween),
// From(TextBox 的值,object 类型),
// To(TextBox 的值,object 类型),
// IgnoreCase(Checkbox,bool 类型)
}
else if (rg.GroupFilter is ValueGroupFilter)
{
var filter = rg.GroupFilter as ValueGroupFilter;
// Value Filter 是 Values 里面的字段做数据过滤,见上图 Value Filter,跟 Label Filter 差不多,只是没有 DistinctCondition 了,Condition 也减少了 TextCondition, 只有 ComparisonCondition 和 IntervalCondition,其他都差不多。(那个 Sum of Quantity 在 filter 中是用 AggregateIndex 标示的,用 AggregateDescriptions 索引可以找到相应的字段)
}
else if (rg.GroupFilter is GroupsCountFilter)
{
var filter = rg.GroupFilter as GroupsCountFilter;
var cnt = filter.Count; // Count 表示数字控件的值,如上图 Top 10 Filter, Count = 100
if (filter.Selection == SortedListSelection.Top) // Selection(枚举,包括 Top / Bottom), 表示第一个 ComboBox 的值,其他部分的数据我也没找到是哪个属性
{
}
else
{
}
}
}
}