开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 4603|回复: 0

[Winforms使用技巧教程]掌握Filter Editor(三)

[复制链接]

0

精华

8

贡献

1768

赞扬

特约版主

帖子
583
软币
4524
在线时间
275 小时
注册时间
2019-2-21
发表于 2020-4-2 10:06:48 | 显示全部楼层 |阅读模式

下载DevExpress v19.2完整版  DevExpress v19.2汉化资源获取

DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅、美观且易于使用的应用程序。想要体验?点击下载>>

DevExpress WinForms安装附带两个允许最终用户构建过滤器查询的控件:提供GUI的Filter控件和将Filter控件与基于文本输入的面板组合在一起的Filter Editor控件。WinForms中,大多数数据感知控件都使用这些组件,但是您也可以将其包含在自己的表单中,并根据需要将其绑定到数据感知控件中。

自定义

在v19.1中为FilterCriteriaDisplayStyle设置引入Visual选项,它结合了对Filter Panel和Filter Control的可视化更改,使用涂有皮肤颜色的小块显示标准。在构建表达式时,它还使用下拉菜单而不是组合框来选择条件。

gridView1.OptionsView.FilterCriteriaDisplayStyle =
DevExpress.XtraEditors.FilterCriteriaDisplayStyle.Visual;

菜单是完全可定制的,此类定制工作的主要入口点是事件FilterEditorCreated,它提供对FilterEditorControl实例的访问,而后者又可以处理三个事件。

PopupMenuShowing允许您隐藏、删除和重命名项目,并更改任何Filter Editor Control菜单图标,用于此目的的相关菜单具有e.MenuType == FilterControlMenuType.Clause:

gridView1.FilterEditorCreated += OnFilterEditorCreated;

private void OnFilterEditorCreated(object sender,
DevExpress.XtraGrid.Views.Base.FilterControlEventArgs e) {
e.FilterEditor.PopupMenuShowing += OnPopupMenuShowing;
}

private void OnPopupMenuShowing(object sender,
DevExpress.XtraEditors.Filtering.PopupMenuShowingEventArgs e) {
if (e.MenuType == FilterControlMenuType.Clause) {
var node = e.CurrentNode as ClauseNode;

// customize function menus for DateTime fields
if (node != null && node.Property.Type == typeof(DateTime)) {
e.Menu.Hide(ClauseType.Equals);
e.Menu.Remove(ClauseType.DoesNotEqual);
e.Menu.Hide(
DevExpress.XtraEditors.Controls.StringId.
FilterAdvancedDateTimeOperatorMenuCaption);
var menuItem = e.Menu.Find(ClauseType.Between);
menuItem.Caption = "Between A and B";
menuItem.ImageOptions.SvgImage = MySvgImage1;
}
}
}

处理事件InitNode来初始化用户创建的新FilterEditor节点,例如分配默认功能和运算符。 在下面的示例中,如果用户为字段ShippingDate创建新条件,则将首先选择函数IsWeekend,该功能包含也被配置为所有字符串字段的默认值。

gridView1.FilterEditorCreated += OnFilterEditorCreated;

private void OnFilterEditorCreated(object sender,
DevExpress.XtraGrid.Views.Base.FilterControlEventArgs e) {
e.FilterEditor.InitNode += OnInitNode;
}

private void OnInitNode(object sender, InitNodeEventArgs e) {
if (e.IsNewNode) {
e.PropertyName = "ShippingDate";
e.SetOperation("IsWeekend");
}
else if (e.PropertyType == typeof(string))
e.SetOperation(FunctionOperatorType.Contains);
}

为BeforeShowValueEditor实现一个处理程序,来自定义Filter Editor Controls中使用的值编辑器。例如,大多数DateTime函数使用日期操作数并使用Calendar编辑器。但是,自定义函数InsideDaysOfToday(以上)接受天数的整数值,下面的代码将默认的Calendar编辑器更改为SpinEdit控件。

gridView1.FilterEditorCreated += OnFilterEditorCreated;

private void OnFilterEditorCreated(object sender,
DevExpress.XtraGrid.Views.Base.FilterControlEventArgs e) {
e.FilterEditor.BeforeShowValueEditor += OnBeforeShowValueEditor;
}

private void OnBeforeShowValueEditor(object sender, ShowValueEditorEventArgs e) {
var node = e.CurrentNode as ClauseNodeEx;
if(node != null && node.Property.Type == typeof(DateTime) &&
Equals(node.FunctionType, WithinDaysOfTodayFunction.FunctionName))
e.CustomRepositoryItem = spinEdit;
}


更多产品使用教程,尽在DevExpress中文网哦~



回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-12-22 15:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表