To reproduce: public Form1() { InitializeComponent(); Random r = new Random(); DataTable table = new DataTable(); table.Columns.Add("ID", typeof(int)); table.Columns.Add("Name", typeof(string)); table.Columns.Add("Bool", typeof(bool)); table.Columns.Add("DateColumn", typeof(DateTime)); for (int i = 0; i < 10; i++) { table.Rows.Add(i, "Row " + i, r.Next(10) > 5 ? true : false, DateTime.Now.AddHours(i)); } radMultiColumnComboBox1.DataSource = table; radMultiColumnComboBox1.EditorControl.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill; radMultiColumnComboBox1.DropDownMinSize = new Size(500, 500); } To work around: radMultiColumnComboBox1.DropDownOpening += new Telerik.WinControls.UI.RadPopupOpeningEventHandler(radMultiColumnComboBox1_DropDownOpening); void radMultiColumnComboBox1_DropDownOpening(object sender, CancelEventArgs args) { radMultiColumnComboBox1.MultiColumnComboBoxElement.MultiColumnPopupForm.MinimumSize = new Size(500, 500); }
To reproduce: 1.Add a RadMultiColumnComboBox and populate it with data. 2.Set the EditorControl.AllowSearchRow and the AutoSizeDropDownToBestFit properties to true . 3.When you open the drop down and try to use the search row (e.g. clicking over the arrow buttons), the drop down is closed. Workaround: Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.ProductsTableAdapter.Fill(Me.NwindDataSet.Products) Me.RadMultiColumnComboBox1.DataSource = Me.ProductsBindingSource Me.RadMultiColumnComboBox1.EditorControl.AllowSearchRow = True Me.RadMultiColumnComboBox1.AutoSizeDropDownToBestFit = True AddHandler Me.RadMultiColumnComboBox1.DropDownClosing, AddressOf RadMultiColumnComboBox1_DropDownClosing AddHandler Me.RadMultiColumnComboBox1.EditorControl.MouseDown, AddressOf EditorControl_MouseDown End Sub Private Sub RadMultiColumnComboBox1_DropDownClosing(sender As Object, args As Telerik.WinControls.UI.RadPopupClosingEventArgs) args.Cancel = shouldCancel shouldCancel = False End Sub Dim shouldCancel As Boolean = False Private Sub EditorControl_MouseDown(sender As Object, e As MouseEventArgs) Dim searchElement = Me.RadMultiColumnComboBox1.EditorControl.ElementTree.GetElementAtPoint(e.Location) If searchElement IsNot Nothing Then Dim parent = searchElement.Parent If parent IsNot Nothing AndAlso (TypeOf parent Is GridSearchRowElement Or TypeOf parent Is GridSearchCellElement) Then shouldCancel = True End If End If End Sub
workaround this.radMultiColumnComboBox1.ResetText();
To reproduce: - Create a custom cell class and try to add an RadMultiColumnComboBoxElement to its children. Workaround: public class MyMCCBElement : RadMultiColumnComboBoxElement { protected override void OnParentChanged(Telerik.WinControls.RadElement previousParent) { if (this.Parent.ElementTree != null) { base.OnParentChanged(previousParent); } } protected override Type ThemeEffectiveType { get { return typeof(RadMultiColumnComboBoxElement); } } }
To reproduce: -add RadMultiColumnComboBox and bind it to some collection. Use the following code: radMultiColumnComboBox1.MultiColumnComboBoxElement.EditorControl.ShowItemToolTips = true; radMultiColumnComboBox1.MultiColumnComboBoxElement.EditorControl.ToolTipTextNeeded += EditorControl_ToolTipTextNeeded; private void EditorControl_ToolTipTextNeeded(object sender, Telerik.WinControls.ToolTipTextNeededEventArgs e) { e.ToolTipText ="some text"; } As a result the tool tip is not shown. Workaround:use ScreenTipNeeded event instead
The SelectedValueChanged event is not fired when you select the current row after filtering. Resolution: In Q1 2014 SP1 (2014.1.402) the first value from data source is selected by default and the event does not fire for already selected value. If you select second or other value and after that select the first row, the SelectedValueChanged and SelectedIndexChanged are fired.
Currently you can filter in RadMultiColumnComboBox only by setting the AutoFilter property. Resolution: You can use the CompositeFilterDescriptors in RadMultiColumnComboBox and filter two or more columns. Please take a look at the code snippet: this.radMultiColumnComboBox1.DisplayMember = "City"; this.radMultiColumnComboBox1.AutoFilter = true; FilterDescriptor descriptor = new FilterDescriptor(this.radMultiColumnComboBox1.DisplayMember, FilterOperator.StartsWith, "Lo"); //first column FilterDescriptor descriptor2 = new FilterDescriptor("ContactName", FilterOperator.StartsWith, "Pe"); //second columns CompositeFilterDescriptor compositeFilter = new CompositeFilterDescriptor(); compositeFilter.FilterDescriptors.Add(descriptor); compositeFilter.FilterDescriptors.Add(descriptor2); compositeFilter.LogicalOperator = FilterLogicalOperator.Or; //OR between these columns this.radMultiColumnComboBox1.EditorControl.FilterDescriptors.Add(compositeFilter);
RadMultiColumnComboBox disabled state in control default is inconsistent with RadDropDownList theme.
Shift + Tab navigation causes drop down opening of RadMultiColumnComboBox
When RadGridView is unbound and you try to create the columns for the RadMultiColumnComboBox manually, RadGridView throws an exception: "Cannot find column bound to 'field name'"
When you have a GridViewMultiComboBoxColumn in RadGridView, you can't set a custom size to the dropdown easily.
If one is using the AutoFilter functionality and want's to select the very first row of the filtered grid, s\he is not able to do so by the keyboard. Resolution: Selection of first row with keyboard is introduced in our KB article Use custom filtering to search in all columns of RadMultiColumnComboBox. Please take a look at the following link http://www.telerik.com/support/kb/winforms/details/use-custom-filtering-to-search-in-radmulticolumncombobox
To reproduce: 1. Open the Telerik Examples application (Quick Start Framework) 2. Go to the MultiColumnComboBox example 3. Enter partial text into the box 4. Click on title to lose focus. You will see that the text will be not cleared. When use Tab key, the text will be cleared.
If value member's column is not included in EditorControl (the grid) SelectedValue property always returns null.
To reproduce: - add custom RadMultiColumnComboBox as follows: class MyRadMultiColumnCombobox : RadMultiColumnComboBox { protected override void OnLoad(System.Drawing.Size desiredSize) { base.OnLoad(desiredSize); this.AutoSizeDropDownToBestFit = true; this.AutoFilter = true; FilterDescriptor filter = new FilterDescriptor(); filter.PropertyName = this.DisplayMember; filter.Operator = FilterOperator.Contains; this.EditorControl.MasterTemplate.FilterDescriptors.Add(filter); } public override string ThemeClassName { get { return typeof(RadMultiColumnComboBox).FullName; } } } - fill it with data: Random r = new Random(); DataTable table = new DataTable(); table.Columns.Add("ID", typeof(int)); table.Columns.Add("Name", typeof(string)); table.Columns.Add("Bool", typeof(bool)); table.Columns.Add("DateColumn", typeof(DateTime)); for (int i = 10; i < 100; i++) { table.Rows.Add(i, "Row " + i, r.Next(10) > 5 ? true : false, DateTime.Now.AddHours(i)); } myRadMultiColumnCombobox1.DataSource = table; myRadMultiColumnCombobox1.DisplayMember = "Name"; - add a RadTextBox and change its text when SelectedIndexChanged event fires: private void myRadMultiColumnCombobox1_SelectedIndexChanged(object sender, EventArgs e) { radTextBoxControl1.Text = myRadMultiColumnCombobox1.SelectedValue.ToString(); } Steps: 1.Type Backspace 2.Type 5 3.Click on the displayed row 'Row 15' will display in the Text Box 4.Type Backspace 5.Type 0 6.Click on the displayed row 'Row 10' should be displayed in the Text Box, but the SelectedIndexChanged event is not fired, so 'Row 15' is still displayed in the text box even though the MultiColumnComboBox appears to have now selected Row 10. Workaround: use myRadMultiColumnCombobox1.MultiColumnComboBoxElement.MultiColumnPopupForm.EditorControl.CurrentRowChanged event instead
To reproduce: -add RadMultiColumnComboBox and use the following code snippet: public partial class Form1 : Form { public Form1() { InitializeComponent(); List<Activity> list1 = new List<Activity>(); for (int i = 0; i < 5; i++) { if (i == 0) { list1.Add(new Activity() { Id = i, Name = "duplicated activity" }); } else { list1.Add(new Activity() { Id = i, Name = "Duplicated Activity" }); } } this.radMultiColumnComboBox1.DataSource = list1; this.radMultiColumnComboBox1.ValueMember = "Id"; this.radMultiColumnComboBox1.DisplayMember = "Name"; MultiColumnComboPopupForm popup = this.radMultiColumnComboBox1.MultiColumnComboBoxElement.MultiColumnPopupForm; popup.EditorControl.MasterTemplate.CaseSensitive = true; this.radMultiColumnComboBox1.SelectedValue = 2; } public class Activity { public string Name { get; set; } public int Id { get; set; } } } Workaround: initialize the selected value in the Load event.
Description: RadMultiColumnComboBox popup grid does not fill the entire height of the dropdown if the dropdown is sized to be wider than the RadMultiColumnComboBox. To reproduce: - add two RadMultiColumnComboBoxes and use the following code: public partial class Form1 : Form { public Form1() { InitializeComponent(); this.radMultiColumnComboBox1.Size = new System.Drawing.Size(172, 20); this.radMultiColumnComboBox2.Size = new System.Drawing.Size(334, 20); Load += Form1_Load; } void InitCombo(RadMultiColumnComboBox combo) { combo.EditorControl.MasterTemplate.AutoGenerateColumns = false; string filterFieldName = "Initials"; string name = "Name"; string displayFieldName = "InitialsPlusName"; combo.EditorControl.Columns.Add(new GridViewTextBoxColumn(filterFieldName) { Width = 60, HeaderText = "Initials" }); combo.EditorControl.Columns.Add(new GridViewTextBoxColumn(name) { Width = 200, HeaderText = "Name" }); combo.EditorControl.Columns.Add(new GridViewTextBoxColumn(displayFieldName) { IsVisible = false }); List<TempData> data = new List<TempData>(); for (int idx = 1; idx < 30; idx++) { data.Add(new TempData() { Id = idx, Name = idx.ToString(), Initials = idx.ToString() }); } combo.DataSource = data; combo.DisplayMember = displayFieldName; combo.ValueMember = "Id"; combo.AutoFilter = true; FilterDescriptor filter = new FilterDescriptor { PropertyName = filterFieldName, Operator = FilterOperator.StartsWith }; combo.EditorControl.MasterTemplate.FilterDescriptors.Add(filter); combo.EditorControl.MasterTemplate.EnableAlternatingRowColor = true; combo.EditorControl.ShowRowHeaderColumn = false; combo.MultiColumnComboBoxElement.DropDownAnimationEnabled = false; combo.MultiColumnComboBoxElement.DropDownWidth = 278; combo.MultiColumnComboBoxElement.DropDownHeight = 238; } void Form1_Load(object sender, EventArgs e) { InitCombo(radMultiColumnComboBox1); InitCombo(radMultiColumnComboBox2); } } public class TempData { public int Id { get; set; } public string Initials { get; set; } public string Name { get; set; } public string InitialsPlusName { get { return Initials + " " + Name; } } } Workaround: public partial class Form1 : Form { public Form1() { InitializeComponent(); this.radMultiColumnComboBox1.Size = new System.Drawing.Size(172, 20); this.radMultiColumnComboBox2.Size = new System.Drawing.Size(334, 20); Load += Form1_Load; } void InitCombo(RadMultiColumnComboBox combo) { combo.EditorControl.MasterTemplate.AutoGenerateColumns = false; string filterFieldName = "Initials"; string name = "Name"; string displayFieldName = "InitialsPlusName"; combo.EditorControl.Columns.Add(new GridViewTextBoxColumn(filterFieldName) { Width = 60, HeaderText = "Initials" }); combo.EditorControl.Columns.Add(new GridViewTextBoxColumn(name) { Width = 200, HeaderText = "Name" }); combo.EditorControl.Columns.Add(new GridViewTextBoxColumn(displayFieldName) { IsVisible = false }); List<TempData> data = new List<TempData>(); for (int idx = 1; idx < 30; idx++) { data.Add(new TempData() { Id = idx, Name = idx.ToString(), Initials = idx.ToString() }); } combo.DataSource = data; combo.DisplayMember = displayFieldName; combo.ValueMember = "Id"; combo.AutoFilter = true; FilterDescriptor filter = new FilterDescriptor { PropertyName = filterFieldName, Operator = FilterOperator.StartsWith }; combo.EditorControl.MasterTemplate.FilterDescriptors.Add(filter); combo.EditorControl.MasterTemplate.EnableAlternatingRowColor = true; combo.EditorControl.ShowRowHeaderColumn = false; combo.DropDownOpening += combo_DropDownOpening; } private void combo_DropDownOpening(object sender, CancelEventArgs args) { RadMultiColumnComboBox combo = sender as RadMultiColumnComboBox; if (combo != null) { combo.MultiColumnComboBoxElement.DropDownHeight = 238; combo.MultiColumnComboBoxElement.DropDownWidth = 278; combo.MultiColumnComboBoxElement.DropDownAnimationEnabled = false; combo.MultiColumnComboBoxElement.EditorControl.Height = 238; } } void Form1_Load(object sender, EventArgs e) { InitCombo(radMultiColumnComboBox1); InitCombo(radMultiColumnComboBox2); radMultiColumnComboBox1.MultiColumnComboBoxElement.ShowPopup(); radMultiColumnComboBox1.MultiColumnComboBoxElement.ClosePopup(); radMultiColumnComboBox2.MultiColumnComboBoxElement.ShowPopup(); radMultiColumnComboBox2.MultiColumnComboBoxElement.ClosePopup(); } } public class TempData { public int Id { get; set; } public string Initials { get; set; } public string Name { get; set; } public string InitialsPlusName { get { return Initials + " " + Name; } } }
To reproduce: - add a RadMultiColumnCombo and bind it to fill with data. Use the following code: this.radMultiColumnComboBox1.EditorControl.SelectionChanged+=EditorControl_SelectionChanged; private void EditorControl_SelectionChanged(object sender, EventArgs e) { radMultiColumnComboBox1.SelectedIndex = -1; } After selecting a new row from the drop down grid, NullReferenceException is thrown.
1. Create a new project with RadMultiColumnComboBox. 2. Set the AutoFilter property to true and add a filter description. 3. Run the project 4. Open the drop down and select some value. 5. Close the drop down and enter a value which is no in the list. 6. Open the drop down two more times.
Currently it is not possible to change the behavior of RadMultiColumnComboBox when using the AutoFilter mode. Check ticket ID 420127 for details.