过滤
RadDataGrid同时支持程序化的过滤和这样的应用通过UI -过滤界面.
程序化的过滤
中添加不同的过滤器描述符来实现程序过滤FilterDescriptor控件的集合。支持以下描述符类型:
- TextFilterDescriptor
- NumericalFilterDescriptor
- DateTimeFilterDescriptor
- BooleanFilterDescriptor
- CompositeFilterDescriptor
- DelegateFilterDescriptor
所有的filterdescriptor都位于Telerik.XamarinForms.Common.Data命名空间中:
xmlns:常见= " clr-namespace: Telerik.XamarinForms.Common.Data;装配= Telerik.XamarinForms.Common”
文本过滤器描述符
属性:
- PropertyName:获取或设置用于检索要筛选的值的属性的名称。
- 操作符:获取或设置TextOperator值,该值定义了value成员如何与items源中的每个值进行比较。
- 价值:获取或设置比较中使用的值。这是比较运算的右操作数。
- IsCaseSensitive:获取或设置一个值,该值决定文本比较是否区分大小写。缺省值为true。
使用TextFilterDescriptor的实例中添加它的实例RadDataGrid。过滤器Descriptors集合并设置其PropertyName属性将其与自定义对象的属性关联。然后通过操作符而且价值属性需要设置筛选条件和要比较的值。你也可以利用IsCaseSensitive属性来确定文本比较是否区分大小写。
数值滤波描述符
表示按数值数据类型的属性进行筛选的描述符。它公开以下属性。
- PropertyName:获取或设置用于检索要筛选的值的属性的名称。
- 价值:获取或设置比较中使用的值。这是比较运算的右操作数。
- 操作符:获取或设置NumericalOperator值,该值定义左右操作数比较背后的布尔logc。
日期时间过滤器描述符
DateTimeFilterDescriptor是一个根据系统属性进行过滤的描述符。DateTime数据类型。它公开了以下属性:
- PropertyName:获取或设置用于检索要筛选的值的属性的名称。
- 价值:获取或设置比较中使用的值。这是比较运算的右操作数。
- 操作符:获取或设置NumericalOperator值,该值定义左右操作数比较背后的布尔逻辑。
布尔过滤器描述符
BooleanFilterDescriptor是一个通过System的属性进行过滤的描述符。布尔数据类型。它公开了以下属性:
- PropertyName:获取或设置用于检索要筛选的值的属性的名称。
- 价值:获取或设置比较中使用的值。这是比较运算的右操作数。
复合过滤器描述符
CompositeFilterDescriptor表示一个特殊的FilterDescriptorBase,它存储了任意数量的其他Descriptors实例。逻辑AND或or运算符应用于所有组合过滤器上,以确定PassesFilter例程的结果。
< /常见:CompositeFilterDescriptor >
委托过滤器描述符
DelegateFilterDescriptor暴露了以下属性:
- 过滤器:获取或设置IFilter用于检查数据项是否通过筛选器的实现。
要使用DelegateFilterDescriptor您需要创建一个实现IFilter接口,该接口将返回关键你想要过滤。
然后,您需要向RadDataGrid添加一个DelegateFilterDescriptor。FilterDescriptors集合,并设置其Filter属性。
的CustomFilter实现:
类CustomFilter: IFilter{公共bool PassesFilter(对象项目){if((项目作为俱乐部)。体育场容量> 60000 &&(项目为俱乐部)。体育场容量<85000){返回true;} else{返回false;}}}
添加DelegateFilterDescriptor到RadDataGrid:
grid.FilterDescriptors。Add(new DelegateFilterDescriptor() {Filter = new CustomFilter()});
过滤界面
当单击选项图标(OptionsButton,三个点)在每个列的标题上,它允许用户轻松地根据列值筛选数据。
OptionsButton打开过滤UI
下图显示了OptionsButton的位置
显示/隐藏OptionsButton
IsOptionsButtonVisible
(保龄球)属性表示OptionsButton是否可见。默认值为真正的
.属性可以设置在DataGridColumnHeaderStyle
.
例子
< telerikGrid: DataGridTextColumn。HeaderStyle >
过滤界面
下面是过滤UI的样子:
过滤UI暴露了以下属性:
- UserFilterMode:定义是否启用/禁用过滤UI。可用的选项有汽车/启用/禁用.UserFilterMode的默认值为汽车.
以下属性用于启用/禁用特定列的过滤:
- CanUserFilter(bool):定义一个值,该值指示用户是否可以使用筛选UI筛选列。
筛选UI的外观可以通过继承DataGridFilterControlBase类。欲了解更多有关此支票的详情如何自定义过滤UI篇文章。
FilterControl模板
从R2 2020 DataGrid允许您使用FilterControlTemplate属性对数据网格列应用过滤。
- FilterControlTemplate(DataTemplate):指定用于过滤UI的用户自定义模板。模板必须包含Telerik.XamarinForms.DataGrid.DataGridFilterControlBase类的一个实例
使用实例TempateColumn
1.类继承的自定义控件是第一步DataGridFilterControlBase类:
公共部分类PopulationFilter: DataGridFilterControlBase{公共PopulationFilter() {InitializeComponent();} public FilterDescriptorBase FilterDescriptor {get;设置;}公共覆盖FilterDescriptorBase BuildDescriptor() {TextFilterDescriptor textDescriptor = new TextFilterDescriptor();textDescriptor。PropertyName= this.PropertyName; textDescriptor.Value = this.textEntry.Text; textDescriptor.Operator = (TextOperator)this.descriptorOperatorPicker.SelectedItem; return textDescriptor; } protected override void Initialize() { this.descriptorOperatorPicker.ItemsSource = this.GetOperators(); var textFilterDescriptor = this.FilterDescriptor as TextFilterDescriptor; if (textFilterDescriptor != null) { this.descriptorOperatorPicker.SelectedIndex = (int)textFilterDescriptor.Operator; this.textEntry.Text = textFilterDescriptor.Value.ToString(); } else { this.descriptorOperatorPicker.SelectedIndex = 0; if (!string.IsNullOrEmpty(this.textEntry.Text)) { this.textEntry.Text = null; } } } private List GetOperators() { var operators = new List { TextOperator.Contains, TextOperator.DoesNotContain, TextOperator.StartsWith, TextOperator.EndsWith, }; return operators; } }
您应该像上面的c#代码片段中所示的那样重写所需的方法。
2.使用FilterControlTemplate属性将已经创建的组件指定为模板列的过滤控件。
< telerikDataGrid: DataGridTemplateColumn。FilterControlTemplate>
的视图模型在本例中使用的声明如下:
公共类FilteringViewModel{公共FilteringViewModel() {var source = new ObservableCollection();源。Add(new City("Vratsa", 54150));源。Add(新城市(“墨西哥城”,22000000));源。Add(new City("Trieste", 204849));源。Add(new City("Ottawa", 934243));源。Add(new City("Caracas", 1943901)); source.Add(new City("Amsterdam", 851573)); source.Add(new City("Pittsburgh", 305704)); source.Add(new City("Athens", 664046)); source.Add(new City("Taipei", 2704974)); source.Add(new City("Marseille", 855393)); source.Add(new City("Pnom Penh", 1501725)); this.GridSource = source; this.TextOperatorSource = Enum.GetValues(typeof(TextOperator)); this.NumericalOperatorSource = Enum.GetValues(typeof(NumericalOperator)); } public ObservableCollection GridSource { get; set; } public IList TextOperatorSource { get; set; } public IList NumericalOperatorSource { get; set; } }
和城市自定义对象:
public class City {public City(字符串名称,int人口){this。Name = Name;这一点。人口=人口;}公共字符串名称{get;设置;}公共int人口{get;设置;}}
中的功能,您可以查看FilterTemplateColumn示例,该示例展示了如何实现功能例子/ DataGrid /过滤文件夹中的SDK示例浏览器应用程序。