HOME PAGE | DOWNLOAD | TUTORIALS | XtraReports
Devexpress

Sunday, July 22, 2012

How to: Substitute the Textual Representation of a Specific Filter with a Custom String

The following example shows how to substitute the textual representation of a specific filter with a custom string. In the code below, when the filter ([Extension] = '.png' OR [Extension] = '.gif') is applied to a View it is represented within the filter panel by the "My Filter" string, regardless of whether this filter is applied in code or by an end-user at runtime:

The default textual representation of the ([Extension] = '.png' OR [Extension] = '.gif') filter is substituted with the custom string using the ColumnView.CustomFilterDisplayText event.

The Value parameter of the ColumnView.CustomFilterDisplayText event specifies the current filter criteria represented by a CriteriaOperator object. In the event handler the filter criteria must be analyzed, and if the "[Extension] = '.png' OR [Extension] = '.gif'" filter condition is found, it must be substituted with a custom string.

The filter criteria (CriteriaOperator) is a tree of operators and operands. To analyze it, a custom MyDisplayCriteriaGenerator class is used, which is derived from the helper DisplayCriteriaGenerator class. The MyDisplayCriteriaGenerator class overrides the Visit method which is fired for each element of the filter criteria tree. The implementation of the Visit method is quite obvious: to determine whether the currently processed tree's element is the required filter condition, and if so, return the custom display text ("My Filter"). Note that a new OperandValue object is created to return the custom string (OperandValue objects are elements of the tree). This object's ToString() method will simply return the "My Filter" string and this will be displayed onscreen when and where appropriate.

C#

using DevExpress.XtraGrid.Views.Base;

using DevExpress.XtraGrid.Columns;

using DevExpress.Data.Filtering;

using DevExpress.XtraGrid.FilterEditor;

using DevExpress.XtraEditors.Controls;

using DevExpress.XtraEditors.Filtering;

 

private void gridView1_CustomFilterDisplayText(object sender, ConvertEditValueEventArgs e) {

    CriteriaOperator filter = e.Value as CriteriaOperator;

    if (!ReferenceEquals(filter, null)) {

        e.Value = MyDisplayCriteriaGenerator.Process(gridView1, filter);

        e.Handled = true;

    }

}

public class MyDisplayCriteriaGenerator : DisplayCriteriaGenerator {

    static CriteriaOperator predefinedCriteria =

      CriteriaOperator.Parse("[Extension] = '.png' OR [Extension] = '.gif'");

    static CriteriaOperator predefinedCriteria2 =

      CriteriaOperator.Parse("[Extension] = '.gif' OR [Extension] = '.png'");

 

    public static CriteriaOperator Process(ColumnView view, CriteriaOperator filter) {

        return new MyDisplayCriteriaGenerator(

          new ViewFilterColumnCollection(view)).Process(filter);

    }

    public MyDisplayCriteriaGenerator(FilterColumnCollection columns) : base(columns) { }

    public override object Visit(GroupOperator theOperator) {

        if (Equals(theOperator, predefinedCriteria) ||

          Equals(theOperator, predefinedCriteria2))

            return new OperandValue("My Filter");

        return base.Visit(theOperator);

    }

}

 

VB

Imports DevExpress.XtraGrid.Views.Base
Imports DevExpress.XtraGrid.Columns
Imports DevExpress.Data.Filtering
Imports DevExpress.XtraGrid.FilterEditor
Imports DevExpress.XtraEditors.Controls
Imports DevExpress.XtraEditors.Filtering;
 
Private Sub GridView1_CustomFilterDisplayText(ByVal sender As System.Object, _
  ByVal e As ConvertEditValueEventArgs) Handles GridView1.CustomFilterDisplayText
    Dim filter As CriteriaOperator = CType(e.Value, CriteriaOperator)
    If Not ReferenceEquals(filter, Nothing) Then
        e.Value = MyDisplayCriteriaGenerator.Process(GridView1, filter)
        e.Handled = True
    End If
End Sub
 
Public Class MyDisplayCriteriaGenerator
    Inherits DisplayCriteriaGenerator
 
    Private predefinedCriteria As CriteriaOperator = _
      CriteriaOperator.Parse("[Extension] = '.png' OR [Extension] = '.gif'")
    Private predefinedCriteria2 As CriteriaOperator = _
      CriteriaOperator.Parse("[Extension] = '.gif' OR [Extension] = '.png'")
 
    Public Overloads Shared Function Process(ByVal view As ColumnView, _
      ByVal filter As CriteriaOperator) As CriteriaOperator
        Return New MyDisplayCriteriaGenerator( _
          New ViewFilterColumnCollection(view)).Process(filter)
    End Function
    Public Sub New(ByVal columns As FilterColumnCollection)
        MyBase.New(columns)
    End Sub
    Public Overrides Function Visit(ByVal theOperator As GroupOperator) As Object
        If Equals(theOperator, predefinedCriteria) OrElse _
          Equals(theOperator, predefinedCriteria2) Then
            Return New OperandValue("My Filter")
        End If
        Return MyBase.Visit(theOperator)
    End Function
End Class

 

No comments:

Post a Comment