[DEVEXPRESS/WINFORM] FilterControl 클래스 : PopupMenuShowing 이벤트를 사용해 커스텀 컨텍스트 메뉴 표시하기
DevExpress/WinForm 2020. 2. 23. 20:20■ FilterControl 클래스 : PopupMenuShowing 이벤트를 사용해 커스텀 컨텍스트 메뉴 표시하기
------------------------------------------------------------------------------------------------------------------------
▶ MainForm.cs
using System; using System.Data;
using DevExpress.Data.Filtering.Helpers; using DevExpress.Utils.Menu; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; using DevExpress.XtraEditors.Filtering; using DevExpress.XtraGrid.Views.Base;
namespace TestProject { /// <summary> /// 메인 폼 /// </summary> public partial class MainForm : XtraForm { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary> /// 생성자 /// </summary> public MainForm() { InitializeComponent();
Load += Form_Load; this.gridView.FilterEditorCreated += gridView_FilterEditorCreated; }
#endregion
#region 폼 로드시 처리하기 - Form_Load(sender, e)
/// <summary> /// 폼 로드시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void Form_Load(object sender, EventArgs e) { DataTable dataTable = new DataTable();
dataTable.Columns.Add("ID" , typeof(int )); dataTable.Columns.Add("Name" , typeof(string)); dataTable.Columns.Add("Check", typeof(bool ));
for(int i = 1; i < 10; i++) { dataTable.Rows.Add(i, string.Format("Item {0}", i), i % 2 == 0); }
this.gridControl.DataSource = dataTable;
this.gridView.ActiveFilterString = "[Check] = false"; }
#endregion #region 그리드 뷰 필터 에디터 생성시 처리하기 - gridView_FilterEditorCreated(sender, e)
/// <summary> /// 그리드 뷰 필터 에디터 생성시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void gridView_FilterEditorCreated(object sender, FilterControlEventArgs e) { e.FilterControl.PopupMenuShowing += FilterControl_PopupMenuShowing; }
#endregion #region 필터 컨트롤 팝업 메뉴 표시시 처리하기 - FilterControl_PopupMenuShowing(sender, e)
/// <summary> /// 필터 컨트롤 팝업 메뉴 표시시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void FilterControl_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e) { if(e.MenuType == FilterControlMenuType.Group) { e.Menu.Remove(GroupType.NotAnd); e.Menu.Remove(GroupType.NotOr);
e.Menu.Find(StringId.FilterMenuGroupAdd).Enabled = false; e.Menu.Find(StringId.FilterMenuClearAll).Caption = "Remove All"; }
if(e.MenuType == FilterControlMenuType.Clause) { ClauseNode node = e.CurrentNode as ClauseNode;
if(node.Property.Name == "ID") { DXMenuItem equalItem = e.Menu.Find(ClauseType.Equals); DXMenuItem doesNotEqualItem = e.Menu.Find(ClauseType.DoesNotEqual);
for(int i = e.Menu.Items.Count - 1; i >= 0; i--) { DXMenuItem item = e.Menu.Items[i];
if(!item.Equals(equalItem) && !item.Equals(doesNotEqualItem)) { item.Visible = false; } } } } }
#endregion } }
|
------------------------------------------------------------------------------------------------------------------------