New to Telerik UI for WinForms? Start a free 30-day trial
User-Defined Values in RadMultiColumnComboBox
Updated over 6 months ago
Environment
| Product Version | Product | Author |
|---|---|---|
| 2022.2.622 | RadMultiColumnComboBox for WinForms | Desislava 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.
