New to Telerik UI for WinFormsStart a free 30-day trial

Formatting Nodes

Updated over 6 months ago

RadDataFilter is a virtualized control reusing its visual elements. It exposes a NodeFormatting event with which its nodes can be easily accessed and customized. The arguments of this event also return the associated data node providing information about the applied descriptor.

The UI of RadDataFilter is virtualized and its visual elements are reused. An 'else' clause is needed for each 'if' statement in the implementation of the NodeFormatting event. Skipping this operation will lead to an incorrect styling.

Formatting Group Nodes

Group nodes can be formatted to handle custom scenarios. The root node in the example below has its expander item hidden.

Figure 1: Hidden Expander Item

WinForms RadDataFilter Hidden Expander Item

Group Nodes

C#
private void radDataFilter1_NodeFormatting(object sender, TreeNodeFormattingEventArgs e)
{
    DataFilterGroupElement dataGroupFilterElement = e.NodeElement as DataFilterGroupElement;
    if (dataGroupFilterElement != null && dataGroupFilterElement.IsRootNode)
    {
        dataGroupFilterElement.ExpanderElement.Visibility = ElementVisibility.Collapsed;
    }
    else
    {
        e.NodeElement.ResetValue(LightVisualElement.VisibilityProperty, ValueResetFlags.Local);
    }
}

Formatting Expression Nodes

The appearance of the expression nodes can also be modified to change their visual appearance.

Figure 2: Changed Back Color

WinForms RadDataFilter Changed Back Color

Expression Nodes

C#
private void radDataFilter1_NodeFormatting1(object sender, TreeNodeFormattingEventArgs e)
{
    DataFilterCriteriaElement dataExpressionFilterElement = e.NodeElement as DataFilterCriteriaElement;
    if (dataExpressionFilterElement != null && dataExpressionFilterElement.CriteriaNode.Descriptor.PropertyName == "Name")
    {
        dataExpressionFilterElement.ContentElement.BackColor = Color.LightBlue;
    }
    else
    {
        e.NodeElement.ResetValue(LightVisualElement.BackColorProperty, ValueResetFlags.Local);
    }
}

Formatting Button Nodes

The button responsible for adding a new expression can also be customized in a formatting event.

Figure 3: Add Button Text

WinForms RadDataFilter Add Button Text

Button Nodes

C#
private void radDataFilter1_NodeFormatting2(object sender, TreeNodeFormattingEventArgs e)
{
    DataFilterAddNodeElement dataAddNodeElement = e.NodeElement as DataFilterAddNodeElement;
    if (dataAddNodeElement != null && dataAddNodeElement.DropDownButton.Text == "Add")
    {
        dataAddNodeElement.DropDownButton.Text = "Add Filter";
    }
    else
    {
        e.NodeElement.ResetValue(LightVisualElement.VisibilityProperty, ValueResetFlags.Local);
    }
}

Formatting Child Expression Elements

Each of the nodes holding the expressions has three editor elements which can be accessed in the NodeFormatting and have their styles modified.

Figure 3: Add Button Text

WinForms RadDataFilter Add Button Text

Child Expression Elements

C#
private void radDataFilter1_NodeFormatting3(object sender, TreeNodeFormattingEventArgs e)
{
    DataFilterCriteriaElement dataExpressionFilterElement = e.NodeElement as DataFilterCriteriaElement;
    if (dataExpressionFilterElement == null)
    {
        return;
    }
    if (dataExpressionFilterElement.CriteriaNode.Descriptor.PropertyName == "Id")
    {
        dataExpressionFilterElement.FieldElement.DrawFill = true;
        dataExpressionFilterElement.FieldElement.GradientStyle = GradientStyles.Solid;
        dataExpressionFilterElement.FieldElement.BackColor = Color.LightGreen;
        dataExpressionFilterElement.OperatorElement.ForeColor = Color.Red;
        dataExpressionFilterElement.ValueElement.DrawFill = true;
        dataExpressionFilterElement.ValueElement.GradientStyle = GradientStyles.Solid;
        dataExpressionFilterElement.ValueElement.BackColor = Color.LightBlue;
    }
    else
    {
        dataExpressionFilterElement.FieldElement.ResetValue(LightVisualElement.DrawFillProperty, ValueResetFlags.Local);
        dataExpressionFilterElement.FieldElement.ResetValue(LightVisualElement.GradientStyleProperty, ValueResetFlags.Local);
        dataExpressionFilterElement.FieldElement.ResetValue(LightVisualElement.BackColorProperty, ValueResetFlags.Local);
        dataExpressionFilterElement.OperatorElement.ResetValue(LightVisualElement.ForeColorProperty, ValueResetFlags.Local);
        dataExpressionFilterElement.ValueElement.ResetValue(LightVisualElement.DrawFillProperty, ValueResetFlags.Local);
        dataExpressionFilterElement.ValueElement.ResetValue(LightVisualElement.GradientStyleProperty, ValueResetFlags.Local);
        dataExpressionFilterElement.ValueElement.ResetValue(LightVisualElement.BackColorProperty, ValueResetFlags.Local);
    }
}

See Also