DevExpress Winforms使用技巧教程:掌握Filter Editor(三)
下載DevExpress v19.2完整版 DevExpress v19.2漢化資源獲取
DevExpress Winforms Controls 內(nèi)置140多個(gè)UI控件和庫(kù),完美構(gòu)建流暢、美觀且易于使用的應(yīng)用程序。想要體驗(yàn)?點(diǎn)擊下載>>
DevExpress WinForms安裝附帶兩個(gè)允許最終用戶(hù)構(gòu)建過(guò)濾器查詢(xún)的控件:提供GUI的Filter控件和將Filter控件與基于文本輸入的面板組合在一起的Filter Editor控件。WinForms中,大多數(shù)數(shù)據(jù)感知控件都使用這些組件,但是您也可以將其包含在自己的表單中,并根據(jù)需要將其綁定到數(shù)據(jù)感知控件中。
自定義
在v19.1中為FilterCriteriaDisplayStyle設(shè)置引入Visual選項(xiàng),它結(jié)合了對(duì)Filter Panel和Filter Control的可視化更改,使用涂有皮膚顏色的小塊顯示標(biāo)準(zhǔn)。在構(gòu)建表達(dá)式時(shí),它還使用下拉菜單而不是組合框來(lái)選擇條件。
gridView1.OptionsView.FilterCriteriaDisplayStyle = DevExpress.XtraEditors.FilterCriteriaDisplayStyle.Visual;
菜單是完全可定制的,此類(lèi)定制工作的主要入口點(diǎn)是事件FilterEditorCreated,它提供對(duì)FilterEditorControl實(shí)例的訪問(wèn),而后者又可以處理三個(gè)事件。
PopupMenuShowing允許您隱藏、刪除和重命名項(xiàng)目,并更改任何Filter Editor Control菜單圖標(biāo),用于此目的的相關(guān)菜單具有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來(lái)初始化用戶(hù)創(chuàng)建的新FilterEditor節(jié)點(diǎn),例如分配默認(rèn)功能和運(yùn)算符。 在下面的示例中,如果用戶(hù)為字段ShippingDate創(chuàng)建新條件,則將首先選擇函數(shù)IsWeekend,該功能包含也被配置為所有字符串字段的默認(rèn)值。
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實(shí)現(xiàn)一個(gè)處理程序,來(lái)自定義Filter Editor Controls中使用的值編輯器。例如,大多數(shù)DateTime函數(shù)使用日期操作數(shù)并使用Calendar編輯器。但是,自定義函數(shù)InsideDaysOfToday(以上)接受天數(shù)的整數(shù)值,下面的代碼將默認(rèn)的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; }
更多產(chǎn)品使用教程,盡在DevExpress中文網(wǎng)哦~
DevExpress技術(shù)交流群:540330292 歡迎一起進(jìn)群討論
掃描關(guān)注DevExpress中文網(wǎng)微信公眾號(hào),及時(shí)獲取最新動(dòng)態(tài)及最新資訊