New to Telerik UI for WinForms? Download free 30-day trial

Create Standalone RadExpressionEditor Form

Date Posted Product Author
09/09/2013 UI for WinForms Georgi Georgiev

Problem

You need to allow your users to use expressions such as Max(), Average(), Len() etc.

Solution

Create a standalone RadExpressionEditor Form which will work without you needing to display an actual RadGridView:

create-standalone-radexpressioneditor-form001

The main goal of this standalone form is to allow us to pass it whatever text we need and get the result after closing it. For this we will need to create our own ExpressionEditor form which derives from RadExpressionEditorForm:

public partial class StandaloneExpressionEditorForm : RadExpressionEditorForm
{
}

Now you can even customize the form’s look and feel in design time to fit your needs.

Usually, the RadExpressionEditorForm requires a RadGridView in order to work. That is why we will need to simulate that. We can avoid the manual creation of the grid by initializing it in the static/shared constructor:

public partial class StandaloneExpressionEditorForm : RadExpressionEditorForm
{
    private static RadGridView hiddenGrid;
    private static GridViewDataColumn dataColumn;

    static StandaloneExpressionEditorForm()
    {
        hiddenGrid = new RadGridView();
        dataColumn = new GridViewTextBoxColumn();
        hiddenGrid.Columns.Add(dataColumn);
        hiddenGrid.Rows.AddNew();
    }

    public StandaloneExpressionEditorForm()
        : base(dataColumn)
    {
    }
}

As the static/shared constructor is called before the instance of the form is created it will guarantee us that the grid and its column are initialized. 

A sample usage of this class so far would look like this:

StandaloneExpressionEditorForm form = new StandaloneExpressionEditorForm();

So far, so good. We have a form which can work with expressions without a grid to worry about. 

Now we just need to be able to pass it an expression when showing it and receiving the result when it is being closed. As we are going to use the ShowDialog method, what we can do is create our own ShowDialog method and pass that expression as an argument:

public DialogResult ShowDialog(object initialValue)
{
    this.Expression = initialValue.ToString();
    return base.ShowDialog();
}

As the result is stored in the dummy row, we can just take its value and use it:

public string ReturnValue
{
    get
    {
        return hiddenGrid.Rows[0].Cells[0].Value.ToString();
    }
}

And now our form should be ready to use. Using it can be limited to only 5 lines of code:

StandaloneExpressionEditorForm form = new StandaloneExpressionEditorForm();
if (form.ShowDialog(this.radTextBox1.Text) == System.Windows.Forms.DialogResult.OK)
{
    this.radTextBox2.Text = form.ReturnValue;
}

A complete solution in C# and VB.NET can be found here.

In this article