您是否希望应用程序能够拥有过滤选项,来帮助用户快速过滤?现在可以使用Telerik UI for WinForms全新的RadFilterView控件,它可以帮您做到!
点击获取Telerik UI for WinForms正式版下载
RadFilterView是一个控件,它允许您的用户使用直观的UI轻松过滤数据,它旨在与我们最流行的控件一起使用,如 RadGridView、RadListView、RadTreeView 等。您可以简单地设置 RadFilterView 的 AssociatedControl 属性,当用户更改某些过滤器时,关联的控件将立即被过滤。
如果您不想在每次用户进行单个更改时触发关联控件的过滤,可以更改FilteringMode属性。
this.radFilterView1.FilteringMode = FilteringMode.Programmatically;
该控件也可以独立工作(没有关联的控件),在这种模式下,需要设置DataSource属性,以便为控件提供数据。
当用户更改任何类别中的值时,将触发控件的 FilterChanged 事件。 在事件处理程序中,您可以使用 FilterDescriptors 的集合,它用于过滤我们的大多数数据控件,或者 RadFilterView.Expression 属性,它返回一个类似 SQL 查询的字符串:
"[FirstName] IN ('Bruce','Chris') AND [SSN] >= 2882255 AND [Married] = True"
类别
它是如何工作的? 设置 DataSource 时,过滤视图控件为相应数据的每一列创建一个类别,然后遍历每条记录并存储值,根据列的数据类型,控件创建不同类型的类别:
- 文本(字符串)数据:该类别创建具有所有唯一值的复选框项目列表,您可以在单选和多选之间切换。
- 数字数据:此类别显示数字输入 (RadSpinEditorElements),并限制用户在数据源中找到的最小值和最大值之间更改值。 旋转编辑器下方还添加了一个 RadTrackbarElement(滑块),以更好地控制值。
- 布尔数据:它是文本类别的父级,并显示两个具有真假值的复选框。
- DateTime:此类别使用两个日期输入 (RadDateTimePickerElements),就像数字输入一样,用户只能在 DataSource 的最小值和最大值之间更改日期。
- Indicators:过滤指标的目的是让用户可以方便地识别出值发生变化的类别(例如,带有一些选中复选框的文本类别或最小值发生变化的数字类别)。 当用户折叠了一些类别并且只看到标题文本时,这非常有用,该指示器还允许清除当前类别的过滤器或控件中的所有过滤器。
使用类别
这些类别提供了多种选项,您可以在其中将整个类别替换为自定义类别、自定义类别或仅更改值。
现在让我们看一下绑定到文本数据的过滤器视图,以下是默认创建的文本类别的外观:
如您所见,类别标题文本不是用户友好的,因为它与源列名称相同,可以在 CategoryCreating 或 CategoryCreated 事件中更改类别显示名称。
private void RadFilterView1_CategoryCreated(object sender, FilterViewCategoryCreatedEventArgs e)
{
if (e.Category.PropertyName == "product_name")
{
e.Category.DisplayName = "Product Name";
}
}
可以看到的另一件事是,这些值与它们在数据源中出现的顺序相同。 当我们有大量文本值时,用户可以更轻松地浏览按字母排序的数据,对值重新排序的正确位置是 CategoryCreating 事件,在这里您甚至可以替换整个类别,这是如何对值进行排序的代码示例:
private void RadFilterView1_CategoryCreating(object sender, FilterViewCategoryCreatingEventArgs e)
{
List<object> values = e.Values.ToList();
values.Sort();
e.Values = values;
}
为了使其更具可读性,我们可以将每个产品的第一个字母大写。 这可以在文本类别的 ItemCreated 事件中完成并更改项目的文本(使用区域性 TextInfo 的 ToTitleCase 方法),附加到此事件的正确位置再次位于 CategoryCreating 事件中。
private void RadFilterView1_CategoryCreating(object sender, FilterViewCategoryCreatingEventArgs e)
{
List<object> values = e.Values.ToList();
values.Sort();
e.Values = values;
FilterViewTextCategoryElement category = e.Category as FilterViewTextCategoryElement;
category.ItemCreated += this.Category_ItemCreated;
}
private void Category_ItemCreated(object sender, FitlerViewTextCategoryItemCreatedEventArgs e)
{
TextInfo info = CultureInfo.CurrentCulture.TextInfo;
string newText = info.ToTitleCase(e.Item.Text);
e.Item.Text = newText;
}
最后的结果:
Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件。所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。
Telerik_KendoUI产品技术交流群:726377843 欢迎一起进群讨论