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.
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.
FIX. RadMultiColumnComboBox. Setting the FormatString to a numeric column to some currency format and changing the column position results in displaying an invalid currency symbol.
To reproduce: void Form1_Load(object sender, EventArgs e) { this.radMultiColumnComboBox2.AutoSizeDropDownToBestFit = true; RadMultiColumnComboBoxElement multiColumnComboElement2 = this.radMultiColumnComboBox2.MultiColumnComboBoxElement; multiColumnComboElement2.EditorControl.MasterTemplate.AutoGenerateColumns = true; DataTable dt = GetDataTable(); this.radMultiColumnComboBox2.DataSource = dt; FilterDescriptor descriptor3 = new FilterDescriptor("Station", FilterOperator.Contains, null); this.radMultiColumnComboBox2.EditorControl.FilterDescriptors.Add(descriptor3); FilterDescriptor descriptor4 = new FilterDescriptor("StationName", FilterOperator.Contains, null); this.radMultiColumnComboBox2.EditorControl.FilterDescriptors.Add(descriptor4); this.radMultiColumnComboBox2.EditorControl.FilterDescriptors.LogicalOperator = FilterLogicalOperator.Or; radMultiColumnComboBox2.AutoFilter = true; } private DataTable GetDataTable() { DataTable dt = new DataTable(); dt.Columns.Add("Station"); //, typeof(Int32)); dt.Columns.Add("StationName"); System.Data.DataRow row1 = dt.NewRow(); System.Data.DataRow row2 = dt.NewRow(); System.Data.DataRow row3 = dt.NewRow(); System.Data.DataRow row4 = dt.NewRow(); System.Data.DataRow row5 = dt.NewRow(); System.Data.DataRow row6 = dt.NewRow(); System.Data.DataRow row7 = dt.NewRow(); System.Data.DataRow row8 = dt.NewRow(); System.Data.DataRow row9 = dt.NewRow(); System.Data.DataRow row10 = dt.NewRow(); row1["Station"] = "285"; row1["StationName"] = "Bob"; row2["Station"] = "274"; row2["StationName"] = "Mary"; row3["Station"] = "222"; row3["StationName"] = "Joan"; row4["Station"] = "289"; row4["StationName"] = "William"; row5["Station"] = "385"; row5["StationName"] = "Bob"; row6["Station"] = "374"; row6["StationName"] = "Mary"; row7["Station"] = "331"; row7["StationName"] = "Jane"; row8["Station"] = "389"; row8["StationName"] = "William"; row9["Station"] = "281"; row9["StationName"] = "Bob"; row10["Station"] = "273"; row10["StationName"] = "Mary"; dt.Rows.Add(row1); dt.Rows.Add(row2); dt.Rows.Add(row3); dt.Rows.Add(row4); dt.Rows.Add(row5); dt.Rows.Add(row6); dt.Rows.Add(row7); dt.Rows.Add(row8); dt.Rows.Add(row9); dt.Rows.Add(row10); return dt; } Start the application and type 2738 (273 is the last row), then press the up arrow twice, exception should occur. Workaround: public class MyRadMultiColumnComboBox : RadMultiColumnComboBox { protected override RadMultiColumnComboBoxElement CreateMultiColumnComboBoxElement() { return new MyRadMultiColumnComboBoxElement(); } } public class MyRadMultiColumnComboBoxElement : RadMultiColumnComboBoxElement { protected override void ProcessKeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Up) { GridViewRowInfo row = this.GetCurrentRow(true); if (row != null) { int index = row.Index; if (index == -1) { if (this.Rows.Count > 0) { this.EditorControl.CurrentRow = this.Rows[0]; } return; } } } base.ProcessKeyDown(sender, e); } protected override Type ThemeEffectiveType { get { return typeof(RadMultiColumnComboBoxElement); } } }
Steps to reproduce: 1. Bind a RMCCB to some data source 2. Enable auto filtering 3. Start the app and enter a value in the text editor of RMCCB 4. Press Tab. You will see that the focus is moved away from the RMCCB but the selection is not changed. Also if you try to open the drop down you will see that it has wrong size. Hitting Escape or Enter instead of Tab produces the correct behavior.
FIX. RadMultiColumnComboBox - when a row with null value is selected, instead of an empty string, the editor displays "Telerik.WinControls.UI.GridView"
When auto filter is enabled and filtering is applied, you cannot select the correct item by mouse.
The RadMultiColumnComboBox throws exceptions if its data source is empty and the AutoSizeDropDownToBestFit property is set to true.