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

User-Defined Values in RadMultiColumnComboBox

Updated over 6 months ago

Environment

Product VersionProductAuthor
2022.2.622RadMultiColumnComboBox for WinFormsDesislava Yordanova

Description

This article shows how to preserve a user-defined valued to RadMultiColumnComboBox when this item is contained in the assigned DataSource collection.

Solution

In order to keep user-defined values in RadMultiColumnComboBox, note that it is necessary to add it to the assigned DataSource collection. Otherwise, it wouldn't be considered as a valid value. It required handling the Tab or Enter keys for adding the custom defined value to the applied DataSource collection.

C#

public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
    public RadForm1()
    {
        InitializeComponent();
    }

    public NwindDataSet DataSet
    {
        get
        {
            return this.nwindDataSet;
        }
    }

    public CategoriesTableAdapter CategoriesTA
    {
        get
        {
            return this.categoriesTableAdapter;
        }
    }

    private void RadForm1_Load(object sender, EventArgs e)
    { 
        this.categoriesTableAdapter.Fill(this.nwindDataSet.Categories);

        this.radMultiColumnComboBox1.DisplayMember = "CategoryName";
        this.radMultiColumnComboBox1.ValueMember = "CategoryID"; 
        this.radMultiColumnComboBox1.DataSource = this.categoriesBindingSource;
        this.radMultiColumnComboBox1.AutoSizeDropDownToBestFit = true;
        this.radMultiColumnComboBox1.CausesValidation = true;

        this.radMultiColumnComboBox1.AutoFilter = true;
        FilterDescriptor myFilter = new FilterDescriptor();
        myFilter.PropertyName = radMultiColumnComboBox1.DisplayMember;
        myFilter.Operator = FilterOperator.Contains;
        radMultiColumnComboBox1.EditorControl.MasterTemplate.FilterDescriptors.Add(myFilter); 
    } 

    public class CustomRadMultiColumnComboBox:RadMultiColumnComboBox
    {
        public override string ThemeClassName  
        { 
            get 
            { 
                return typeof(RadMultiColumnComboBox).FullName;  
            }
        }

        protected override void OnValidated(EventArgs e)
        {
            ProcessCustomText();
            base.OnValidated(e);
        }

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData== Keys.Tab || keyData== Keys.Enter)
            {
                ProcessCustomText();
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

        private void ProcessCustomText()
        {
            RadForm1 f = (RadForm1)this.ElementTree.Control.FindForm();

            NwindDataSet.CategoriesDataTable dt = f.DataSet.Categories;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows[i]["CategoryName"].ToString() == this.Text)
                {
                    return;
                }
            }
            if (this.Text != String.Empty)
            {

                NwindDataSet.CategoriesRow newCategoriesRow = dt.NewCategoriesRow();
                newCategoriesRow.CategoryName = this.Text;
                f.DataSet.Categories.Rows.Add(newCategoriesRow);

                f.CategoriesTA.Update(f.DataSet.Categories);
            }
        }
    }
    
}
         

Do not forget to replace the default RadMultiColumnComboBox with the custom one in the Designer.cs file.

user-defined-values-in-multicolumncombobox 001

See Also