Example T329217
Visible to All Users

WinForms Data Grid - Rename grid filters and serialize custom names

When an end user applies a filter to a grid, the filter is shown within the Filter Panel. If the AllowMRUFilterList option is enabled, the user can access recently used filters and apply them.

This example shows how to allow the user to rename filters as needed:

Rename grid filters and serialize custom names

C#
public partial class Main : XtraForm { FilterNameProvider provider; public Main() { InitializeComponent(); gridView1.OptionsView.FilterCriteriaDisplayStyle = FilterCriteriaDisplayStyle.Text; recordBindingSource.DataSource = DataHelper.GetData(10); provider = new FilterNameProvider(gridView1) { AllowSettingFilterNames = true }; } }

The FilterNameProvider.GridFilters property is marked with the XtraSerializableProperty attribute. The following code serializes custom filter names with the grid layout:

C#
void OnSaveLayoutButtonClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { gridView1.SaveLayoutToXmlEx(provider, filePath); }

The following code deserializes (restores) grid filters:

C#
void OnRestoreLayoutButtonClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { gridView1.RestoreLayoutFromXmlEx(provider, filePath); }

GridFitlerItem objects are not created automatically. You should declare a special method in the FilterNameProvider class that creates such objects. Name this method according to the following pattern: "XtraCreateItem". In this example, this is the XtraCreateGridFiltersItem method:

C#
internal GridFitlerItem XtraCreateGridFiltersItem(XtraItemEventArgs e) { GridFitlerItem fItem = new GridFitlerItem(); GridFilters.Add(fItem); return fItem; }

Files to Review

Documentation

Does this example address your development requirements/objectives?

(you will be redirected to DevExpress.com to submit your response)

Example Code

WindowsApplication3/FilterNameProvider.cs(vb)
C#
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using DevExpress.Utils.Menu; using DevExpress.Utils.Serializing; using DevExpress.XtraBars.Docking2010.Customization; using DevExpress.XtraBars.Docking2010.Views.WindowsUI; using DevExpress.XtraEditors; using DevExpress.XtraGrid.Views.Base; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraGrid.Views.Grid.ViewInfo; namespace DXSample { public class FilterNameProvider { List<GridFitlerItem> filters; DXPopupMenu menu; GridView view; public FilterNameProvider(GridView view) { this.view = view; view.OptionsLayout.StoreDataSettings = true; filters = new List<GridFitlerItem>(); } bool fAllowSettingFilterNames; public bool AllowSettingFilterNames { get { return fAllowSettingFilterNames; } set { if (fAllowSettingFilterNames != value) { fAllowSettingFilterNames = value; if (fAllowSettingFilterNames) { SubscribeToEvents(); CreatePopupMenu(); } else { UnsubscribeFromEvents(); DestroyPopupMenu(); } } } } [XtraSerializableProperty(XtraSerializationVisibility.Collection, true)] public List<GridFitlerItem> GridFilters { get { return filters; } } internal GridFitlerItem XtraCreateGridFiltersItem(XtraItemEventArgs e) { GridFitlerItem fItem = new GridFitlerItem(); GridFilters.Add(fItem); return fItem; } void SubscribeToEvents() { view.MouseDown += OnViewMouseDown; view.CustomFilterDisplayText += OnViewCustomFilterDisplayText; } void OnViewCustomFilterDisplayText(object sender, DevExpress.XtraEditors.Controls.ConvertEditValueEventArgs e) { GridView view = sender as GridView; string filterString = e.Value.ToString(); GridFitlerItem fItem = filters.FirstOrDefault(it => it.FilterString == filterString); if(fItem != null){ e.Value = fItem.FilterName; e.Handled = true; } } void OnViewMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { GridView view = sender as GridView; GridHitInfo hitInfo = view.CalcHitInfo(e.Location); if (e.Button == MouseButtons.Right && hitInfo.HitTest == GridHitTest.FilterPanel) { ((IDXDropDownControl)menu).Show(new SkinMenuManager(view.GridControl.LookAndFeel), view.GridControl, e.Location); } } void CreatePopupMenu() { menu = new DXPopupMenu(); menu.Items.Add(new DXMenuItem("Save Filter As", OnSaveItemClick)); } void OnSaveItemClick(object sender, EventArgs e) { FlyoutAction action = new FlyoutAction() { Caption = "Save Filter As", Description = "" }; FlyoutCommand command1 = new FlyoutCommand() { Text = "Save", Result = DialogResult.OK }; FlyoutCommand command2 = new FlyoutCommand() { Text = "Cancel", Result = DialogResult.Cancel }; action.Commands.Add(command1); action.Commands.Add(command2); using (TextEdit filterNameEdit = new TextEdit()) { filterNameEdit.Width = 300; if (FlyoutDialog.Show(view.GridControl.FindForm(), action, filterNameEdit) == System.Windows.Forms.DialogResult.OK) { if (string.IsNullOrEmpty(filterNameEdit.Text.Trim())) return; GridFitlerItem fItem = filters.FirstOrDefault(it => it.FilterString == view.ActiveFilterString); if (fItem == null) filters.Add(new GridFitlerItem() { FilterString = view.ActiveFilterString, FilterName = filterNameEdit.Text }); else fItem.FilterName = filterNameEdit.Text; view.LayoutChanged(); } } } void UnsubscribeFromEvents() { view.MouseDown -= OnViewMouseDown; view.CustomFilterDisplayText -= OnViewCustomFilterDisplayText; } void DestroyPopupMenu() { menu.Dispose(); menu = null; } } public class GridFitlerItem { public GridFitlerItem() { } [XtraSerializableProperty] public string FilterString { get; set; } [XtraSerializableProperty] public string FilterName { get; set; } } public static class Extensions { public static void SaveLayoutToXmlEx(this ColumnView view, FilterNameProvider provider, string filePath) { XmlXtraSerializer serializer = new XmlXtraSerializer(); serializer.SerializeObjects(new XtraObjectInfo[] {new XtraObjectInfo("View", view), new XtraObjectInfo("Filters", provider) }, filePath, "DXSample"); } public static void RestoreLayoutFromXmlEx(this ColumnView view, FilterNameProvider provider, string filePath) { XmlXtraSerializer serializer = new XmlXtraSerializer(); serializer.DeserializeObjects(new XtraObjectInfo[] { new XtraObjectInfo("View", view), new XtraObjectInfo("Filters", provider) }, filePath, "DXSample"); } } }
WindowsApplication3/Main.cs(vb)
C#
using System; using System.Collections.Generic; using System.Linq; using DevExpress.XtraEditors; using DXSample.Data; namespace DXSample { public partial class Main : XtraForm { FilterNameProvider provider; public Main() { InitializeComponent(); gridView1.OptionsView.FilterCriteriaDisplayStyle = FilterCriteriaDisplayStyle.Text; recordBindingSource.DataSource = DataHelper.GetData(10); provider = new FilterNameProvider(gridView1) { AllowSettingFilterNames = true }; } string filePath = "Layout.xml"; private void OnSaveLayoutButtonClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { gridView1.SaveLayoutToXmlEx(provider, filePath); } private void OnRestoreLayoutButtonClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { gridView1.RestoreLayoutFromXmlEx(provider, filePath); } } }

Disclaimer: The information provided on DevExpress.com and affiliated web properties (including the DevExpress Support Center) is provided "as is" without warranty of any kind. Developer Express Inc disclaims all warranties, either express or implied, including the warranties of merchantability and fitness for a particular purpose. Please refer to the DevExpress.com Website Terms of Use for more information in this regard.

Confidential Information: Developer Express Inc does not wish to receive, will not act to procure, nor will it solicit, confidential or proprietary materials and information from you through the DevExpress Support Center or its web properties. Any and all materials or information divulged during chats, email communications, online discussions, Support Center tickets, or made available to Developer Express Inc in any manner will be deemed NOT to be confidential by Developer Express Inc. Please refer to the DevExpress.com Website Terms of Use for more information in this regard.