用于WPF的Telerik UI?下载30天免费试用

基本过滤

本文将讨论以下主题:

RadGridView提供了内置的过滤功能,允许用户轻松地按一列或多列过滤数据。对于大多数。net基元类型,如字符串、数值类型、日期时间等,过滤将是开箱即用的。

如果要筛选绑定到自定义类型的列,则该类型必须满足描述的一些要求在这里

您可以使用IsFilteringAllowed属性的RadGridView禁用过滤。方法可禁用特定列的筛选IsFilterable属性。

过滤模式

有两种内置的过滤模式,您可以通过设置FilteringMode的属性RadGridView

弹出式过滤是RadGridView提供的默认过滤模式。通过单击列标题中的漏斗图标来激活它。

过滤弹出框

Telerik WPF DataGrid过滤基本01

不同的值

呈现给用户的过滤控件有两个部分。控件的上部显示在各自列中找到的不同值。您随时看到的值是应用所有其他列筛选器后剩下的值。换句话说,这些值只从可见行收集。可以很容易地配置此行为,如中所述这篇文章

显示给用户的字符串表示是通过从源集合获取不同的原始值,然后应用列的值生成的DataMemberBindingIValueConverterDataFormatString如果有任何定义。例如,如果您指定了一个货币DataFormatString,用户将看到格式化良好的2.22美元在不同值列表中。然而,在这个格式化良好的字符串下面是原始的浮动值将被保留,并用于在数据引擎内部执行实际的筛选。

使用IValueConverter或DataFormatstring不会以任何方式影响数据操作。它们仅用于UI目的,在数据引擎中不扮演任何角色。过滤总是使用原始数据值执行。

默认情况下,只显示前1000个不同的值。中所述的不同值的数量可以很容易地进行配置这篇文章

如果不需要筛选控件的不同值部分,可以使用ShowDistinctFilters属性。此属性仅在过滤模式为时才有意义弹出

场过滤器

控件的下半部分表示两个字段过滤器。这是由一个逻辑运算符连接起来的两个过滤条件。字段过滤器允许用户创建过滤条件,如“年龄大于18岁,小于60岁”。每个字段过滤器由两部分组成。上面的部分是一个组合框,允许用户指定要进行的比较类型。等于小于,等等。这些被称为过滤器操作符。可用的筛选操作符取决于列的数据类型。例如,对于字符串列,您将看到特定于字符串的操作符,例如包含而且包含在,而对于数字列和日期列,您将看到比较操作符大于小于等。在这里您可以根据列数据类型找到描述可用筛选操作符的表。如果要删除向用户提供的一些可用的筛选操作符或更改默认选择的操作符,可以使用FilterOperatorsLoading事件的RadGridView在这里

字段过滤器的下面部分称为字段过滤器编辑器。同样,用户将看到的编辑器取决于列数据类型。例如,如果您有一个日期列,用户将能够通过日期时间选择器控件输入过滤条件。根据列数据类型,选择和使用最合适的编辑器。当然,您总是可以插入您自己的字段筛选编辑器,如本文所述文章.如果您想修改我们为您选择的股票字段过滤器编辑器的外观或行为,您可以通过附加到FieldFilterEditorCreatedRadGridView的事件在这里

如果不需要筛选控件的字段筛选部分,可以使用ShowFieldFilters属性。此属性仅在过滤模式为弹出式时才有意义。对于布尔列,是这样的默认情况下。

您还可以控制这两个字段过滤器的创建弹出而且FilterRow模式通过新的ShouldGenerateFieldFilterEditors财产。默认值为在这种情况下,将为所有非布尔列生成字段过滤器。设置为将停止生成字段过滤器编辑器,从而导致FilterOperatorsLoading事件将不会被引发。将属性设置为真正的将只对布尔列有影响,该列随后将显示一个复选框作为它们的筛选器和IsEqualTo而且IsNotEqualTo过滤的是经营者而不是冒牌货真正的而且操作符。

请注意ShowFieldFilters而且ShouldGenerateFieldFilterEditors在使用弹出过滤模式。如果他们中的任何一个被设置成,将不会创建任何字段筛选编辑器。

延迟过滤

筛选控件的默认行为是,一旦用户选择不同的值或在两个字段筛选编辑器之一中键入内容,就应用筛选器。换句话说,只要过滤控件中表示的过滤条件中的任何内容发生变化,就会要求数据引擎执行过滤。记住这一点,你可以隐藏过滤器按钮。ShowFilterButton属性设置为false。

此行为可以通过调整IsFilteringDeferred属性。此属性是有意义的,仅当网格的FiltertingMode为Popup时才使用。当IsFilteringDeferred设置为真正的直到用户显式单击Filter按钮,才会发生过滤。当在远程服务器上执行过滤,并且每次到服务器的行程都很昂贵时,这种模式非常有用。单击清晰的按钮将始终在一次批处理操作中立即清除所有列的过滤器。此操作不能延迟,总是立即执行。

保持过滤器弹出打开

通过FilteringDropDownStaysOpen属性,可以控制在弹出窗口外发生单击时,过滤下拉框是否保持打开状态。它的默认值为.如果设置为真正的,该弹出框只会在单击关闭按钮或过滤器图标。

过滤行

FilterRow过滤模式在每个可过滤列的标题单元格中提供了一个内置的过滤器。这种模式更简单,不支持不同值的概念。事实上,显示在标题单元格中的字段过滤器编辑器与弹出过滤控件中的两个字段过滤器编辑器完全相同。您可以认为这是Popup模式的过度简化版本,其中用户只看到Popup过滤控件的两个字段筛选编辑器中的一个,而且编辑器始终可见。

筛选器行

Telerik WPF DataGrid filter basic 02

最初,所有过滤器都是空的。在编辑器中输入值之后,必须通过单击漏斗图标来选择操作符。下拉列表将列出适用于列类型的所有可用操作符。如果要删除一些可用的筛选操作符,可以使用FilterOperatorsLoading事件的RadGridView。但请记住,在使用筛选器行模式时,不能通过事件参数预先定义默认选择的操作符。当模式为筛选行时,选择筛选操作符是最终用户的工作。在这个列表中有一个特殊的运算符叫做清晰的过滤器.这不是一个真正的过滤器操作符。相反,它将在选中时清除并重置列筛选器。

布尔列的左侧没有编辑器。相反,他们有两个额外的假操作员称为是真的而且是假的.从筛选操作符列表中选择Is True要比选中复选框然后选择Is Equal To操作符直观得多。

一旦输入了值并选择了筛选操作符,筛选器就会激活。这是由过滤漏斗填满所显示的。一旦过滤器被激活,值或运算符的任何更改都将立即应用于下面的数据。当用户通过选择清晰的过滤器选项,过滤器将被禁用,并且在用户选择另一个过滤器操作符之前不会再次激活。的IsFilteringDeferred属性不适用,当模式为筛选器行时将忽略。

就像使用弹出过滤模式一样,您可以随时插入您自己的字段筛选编辑器,如中所述这篇文章.如果您想修改我们为您选择的默认字段筛选器的外观或行为,您可以通过附加到FieldFilterEditorCreatedRadGridView的事件在这里

自定义过滤控件只能在FilteringMode为弹出式时使用。FilterRow不能使用自定义过滤控件。

FilterMemberPath

每一个GridViewColumn有一个属性叫做FilterMemberPath.此属性可用于告诉列筛选与它在单元格中显示的属性不同的属性。万一类型的属性无法被数据引擎自动发现时,您可以通过设置FilterMemberType财产。

下面的示例显示如何指定FilterMemberPath来对列进行筛选NameToFilterOn属性。

指定列的FilterMemberPath

OptimizeDistinctFilterQuery

默认情况下,窗体的条件“成员IsEqualTo值”为所选的每个不同值生成。然后,将所有这些条件与操作符。当所检查的不同值的数量增加时,查询可能会变得非常慢。设置OptimizeDistinctFilterQuery的属性GridViewColumn真正的将检查所检查的不同值的数量。如果这个量小于或等于所有不同值的一半,则将生成原始查询。但是,如果被检查的不同值的数量超过所有不同值的一半,则会生成这样的反向语句:(Member IsNotEqualTo uncheckedDistinctValue_0)…和…(成员IsNotEqualTo uncheckedDistinctValue_N)。如果完全检查了所有不同的值,则根本不会生成任何语句,因为这实际上意味着没有应用过滤器。将此属性设置为真正的会尝试生成最短的LINQ在哪里条款。

不同值过滤

GridViewColumn基类公开EnableDistinctValuesFiltering而且DistinctValuesSearchMode属性,它允许您筛选列的不同值。

通过设置EnableDistinctValuesFiltering属性为真正的,一个RadWatermarkTextBox元素将出现在FilteringControl中。通过这个元素,用户可以过滤列的不同值。

DistinctValuesSearchMode属性允许您更改标准,根据该标准,用户输入将过滤值。此属性的公开值为包含ContainsCaseSensitiveStartsWith,StartsWithCaseSensitive

EnableDistinctValuesFiltering而且DistinctValuesSearchMode属性用于FilteringMode属性设置为弹出

下面的示例展示了如何利用这些属性。

设置EnableDistinctValuesFiltering和DistinctValuesSearchMode属性

    < / telerik: RadGridView >
过滤StadiumCapacity列的不同值

过滤StadiumCapacity列的不同值

另请参阅

在本文中
Baidu
map