找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-6-12 15:06  /   查看:2759  /  回复:0
本帖最后由 Richard.Ma 于 2020-6-15 13:53 编辑

2020v1版本中,我们添加了一个新的基于UI的过滤器控件C1FilterEditor。FilterEditor的设计具有直观的UI,允许最终用户动态创建复杂的过滤条件。
C1FilterEditor
C1FilterEditor是一个具有树视图布局的控件,允许最终用户通过将过滤器组合和操作添加为节点来创建高级过滤器条件。过滤器组合是过滤器操作的集合,过滤器操作是一个表达式,使最终用户可以选择字段,值和应过滤数据的逻辑操作的类型。
此控件已添加到“ C1.Win.DataFilter”程序集中,其中包括现有的C1DataFilter控件。
以上是C1FilterEditor的简要介绍以及它的界面外观。接下来我们进一步了解更多详细信息。

C1FilterEditor的主要功能:基于UI的过滤
FilterEditor通过添加过滤器操作的组合来过滤数据源,这些操作将它们组织成树状结构。这个界面使开发人员只需单击几下即可创建复杂的过滤条件。
最终用户互动
该控件支持交互式功能,以为最终用户提供方便的筛选界面。以下列出了最终用户可以进行的操作:

展开/折叠过滤器:
FilterEditor在逻辑上将过滤条件分组(分为And / Or函数),从而创建树状结构。这种布局可以切换过滤条件显示,并允许更多地关注特定的过滤操作。C1FilterEditor通过为每个节点提供+/-框来启用此功能。

过滤器的添加/删除:
最终用户可以使用FilterEditor动态添加或删除过滤器组合/操作,并在数据控件中同时查看相应的结果。FilterEditor通过为每个过滤器组合/操作提供+ / X按钮来实现此目的。

拖放过滤器:
FilterEditor支持更改过滤器组合的顺序和/或通过简单地拖放将过滤器操作从一种组合移动到另一种组合。C1FilterEditor借助垂直省略号按钮启用此功能。
该控件通过将EnableDragDrop属性分别设置为true / false ,可以灵活地允许或禁止拖放。

程序过滤
除了基于动态UI的筛选之外,该控件还支持通过代码创建相同的筛选条件。这样,应用程序的开发人员可以通过应用预定义的过滤器来构建默认视图。使用CombinationExpressionOperationExpression类可以完成代码筛选。

无缝整合
FilterEditor控件与任何UI组件无缝集成,从而可以使用不具有任何内置过滤支持的UI组件进行方便的过滤。
到目前为止,我们已经讨论了使用C1FilterEditor的好处及其提供的内容。但是在深入研究如何利用这些功能的优势之前,让我们首先浏览一些与C1FilterEditor相关的常用术语。

FilterEditor中的术语
要使用C1FilterEditor构建过滤条件,以下是与C1FilterEditor相关的以下常用术语:
过滤器操作
可以将过滤操作定义为希望通过其过滤数据的过滤条件。每个过滤器操作都定义列/字段,逻辑运算符和值。
例如,“ SupplierID = 4”是一个过滤操作,其中“ SupplierID”是数据源中存在的列/字段/属性的名称,“ Equal”是“ =”运算符,而4是值。

过滤器组合
过滤器组合是一组简单的过滤器条件/操作或由同一逻辑运算符组合的其他组。用数学术语,可以将其视为括号中的过滤器表达式中的各个部分。
例如,“ SupplierID = 4 AND Discontinued = False OR CategoryID = 2”过滤器表达式可以用圆括号包装为“(SupplierID = 4 AND Discontinued = False)OR(CategoryID = 2)”。现在,此表达式显示两个组:Group1:SupplierID = 4 AND Discontinued = False和Group2:CategoryID = 2,其中每个组中的过滤条件由同一逻辑运算符组合。
现在,我们已经知道了与C1FilterEditor相关的术语,让我们讨论

//Using AND combinationprivate static CombinationExpression GetPredefinedFilter(){  var filterExpression = new CombinationExpression();  var filterExpressions = filterExpression.Expressions;  //Adding first operation to AND combination  var supplierIDEqual4Expression = new OperationExpression()  {      PropertyName = "SupplierID",      FilterOperation = FilterOperation.Equal,      Value = 4  };  filterExpressions.Add(supplierIDEqual4Expression);          //Adding second operation to AND combination  var discontinuedEqualFalseExpression = new OperationExpression()  {     PropertyName = "Discontinued",     FilterOperation = FilterOperation.Equal,      Value = False  };  filterExpressions.Add(discontinuedEqualFalseExpression);  //Adding new OR combination  var categoryIDOrExpression = new CombinationExpression();  categoryIDOrExpression.FilterCombination = FilterCombination.Or;  var categoryIDExpressions = categoryIDOrExpression.Expressions;  //Adding first operation to OR combination  var categoryIDEqual2Expression = new OperationExpression()  {      PropertyName = "CategoryID",      FilterOperation = FilterOperation.Equal,      Value = "2"  };


过滤表达式
C1FilterEditor控件允许通过添加一系列过滤器组合和操作来创建任何复杂度的过滤器标准。以下各节说明了其逐步实现:

建立简单的过滤条件
即使最简单的过滤器表达式也包含三个元素:字段,运算符和值,统称为过滤器操作。
要查看实现,请看一下我们在上面的“过滤器操作”标题中讨论的过滤器标准:“ SupplierID = 4”。
运行时步骤:
  • 将VS工具箱中的C1FilterEditor控件拖放到WinForms项目的表单上。
  • 在属性窗口中查找“ DataSource”属性,并将其设置为数据源。
  • 控件的默认布局将具有默认的根运算符“ AND”。
  • 单击右侧的加号图标。它将创建一个过滤器操作模板。
  • C1FilterEditor会自动使用数据源中的所有字段/属性填充第一个下拉列表。在这里,从下拉列表中选择“ SupplierID”。
  • 第二个下拉列表包含基于所选字段/属性的类型的逻辑运算符。在这里,选择“等于”运算符。
  • 现在,在第三个元素中输入值:4。
  • 单击底部的ApplyFilter按钮。

等效的C#代码:
上面的过滤器表达式也可以使用以下代码实现:


通过UI /代码完成上述步骤将以仅满足“ SupplierID = 4”条件的记录将保留在数据源/视图中的方式过滤数据源。

建立复杂的过滤器标准
C1FilterEditor允许创建包含多个过滤器操作的高级过滤器条件。也就是说,使用C1FilterEditor可以创建过滤器表达式,该表达式由逻辑组合(通过AND / OR运算符)的多组过滤条件组成。为了展示,让我们考虑一个复杂的过滤条件:“ SupplierID = 4 AND Discontinued = False OR CategoryID = 2 OR CategoryID = 6”。要实现这样的过滤器表达式,我们首先需要确定组。因此,让我们将该表达式用方括号括起来,并通过逻辑运算符将它们组合为“(SupplierID = 4 AND Discontinued = False)OR(CategoryID = 2 OR CategoryID = 6)”。
因此,这两个组是组1:(SupplierID = 4 AND Discontinued = False)和组2:(CategoryID = 2或CategoryID = 6)。
运行时步骤:
  • 将VS工具箱中的C1FilterEditor控件拖放到WinForms项目的表单上。
  • 在属性窗口中查找“ DataSource”属性,并将其设置为数据源。
  • 控件的默认布局将具有默认的根运算符“ AND”。将其切换到OR运算符,因为我们希望通过OR逻辑运算符组合组。
  • 单击+图标,然后选择“组合”,这将为组1创建一行。
  • 在新行上,单击+图标,然后选择“操作”以创建过滤条件行。
  • 现在,将字段元素更改为“ SupplierID”,将过滤器运算符更改为“等于”,然后在最后一个元素中输入“ 4”。
  • 同样,添加另一个“ Operation”行,并将其元素分别设置为Discontinued,Equal和False。这样就完成了第一组。
  • 第一组完成后,我们需要为组2添加一行。
  • 对于组2,再次单击根行中的+图标,选择“组合”,然后将OR设置为运算符。
  • 与步骤5一样,单击新行上的+图标,然后选择“操作”以创建用于过滤条件的行。
  • 将元素值设置为“ CategoryID”,“等于”和“ 2”。
  • 再次,为第二个过滤条件添加一个新行,并将其值设置为'CategoryID','Equal'和'6'。
  • 单击“应用过滤器”按钮以过滤数据源。

等效的C#代码:
上面的过滤器表达式也可以使用以下代码实现:
  categoryIDExpressions.Add(categoryIDEqual2Expression);  //Adding second operation to OR combination  var categoryIDEqual6Expression = new OperationExpression()  {      PropertyName = "CategoryID",      FilterOperation = FilterOperation.Equal,      Value = "6"  };   categoryIDExpressions.Add(categoryIDEqual6Expression);   filterExpressions.Add(categoryIDOrExpression);   return filterExpression;}


大功告成 上面的代码将使用复杂的过滤条件过滤数据:“ SupplierID = 4 AND Discontinued = False OR CategoryID = 2 OR CategoryID = 6”

希望您喜欢这个易用的新控件,欢迎回帖讨论


0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部