Winforms平臺界面開發技巧,如何快速掌握Filter Editor(三)

點擊“瞭解更多”獲取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;

Winforms平臺界面開發技巧,如何快速掌握Filter Editor(三)

菜單是完全可定製的,此類定製工作的主要入口點是事件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 fieldsif (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;}}}

Winforms平臺界面開發技巧,如何快速掌握Filter Editor(三)

處理事件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;}

Winforms平臺界面開發技巧,如何快速掌握Filter Editor(三)



分享到:


相關文章: