To reproduce: Type "Th" into the multi-column combo box in the attached project. Then press and hold the Backspace key until "Th" is deleted. Then release Backspace key. There remain only the filtered options in the dropdown. If I press and release the backspace key 1x for each typed letter, then the dropdown repopulates as expected. Workaround: private void radMultiColumnComboBox1_TextChanged(object sender, EventArgs e) { this.radMultiColumnComboBox1.MultiColumnComboBoxElement.ApplyFilter(); }
To reproduce: - Start the attached project and type a value so one item remains in the drop down. - Press Enter - event is not fired. Workaround: Use the DropDownClosed event and check if the value is changed.
To reproduce: run the attached project and refer to the attached gif file. Workaround: this.radMultiColumnComboBox1.MultiColumnComboBoxElement.TextBoxElement.TextBoxItem.TextBoxControl.MouseDown += TextBoxControl_MouseDown; private void TextBoxControl_MouseDown(object sender, MouseEventArgs e) { this.radMultiColumnComboBox1.MultiColumnComboBoxElement.TextBoxElement.TextBoxItem.TextBoxControl.SelectAll(); }
To reproduce: - Open the attached project. - Type a text so there are no results in the drop down. - Press Enter. - Click the arrow button. Workaround: private void RadMultiColumnComboBox1_DropDownOpened1(object sender, EventArgs e) { if (radMultiColumnComboBox1.Text == "") { radMultiColumnComboBox1.EditorControl.FilterDescriptors.Clear(); CompositeFilterDescriptor compositeFilter = new CompositeFilterDescriptor(); compositeFilter.FilterDescriptors.Add(new FilterDescriptor("Drug", FilterOperator.StartsWith, "")); compositeFilter.FilterDescriptors.Add(new FilterDescriptor("Name", FilterOperator.StartsWith, "")); compositeFilter.LogicalOperator = FilterLogicalOperator.Or; radMultiColumnComboBox1.EditorControl.FilterDescriptors.Add(compositeFilter); } }
To reproduce: public Form1() { InitializeComponent(); DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Name", typeof(string)); for (int i = 0; i < 20; i++) { dt.Rows.Add(i, "Item" + i); } this.radMultiColumnComboBox1.DataSource = dt; this.radMultiColumnComboBox1.DisplayMember = "Name"; this.radMultiColumnComboBox1.ValueMember = "Id"; this.radMultiColumnComboBox1.SelectedValueChanged += radMultiColumnComboBox1_SelectedValueChanged; } private void radMultiColumnComboBox1_SelectedValueChanged(object sender, EventArgs e) { if (this.radMultiColumnComboBox1.SelectedIndex > -1) { MessageBox.Show("Test"); } } NOTE: If you use a RadMessageBox, after showing the message the first time, the popup can't be closed because InvalidOperationException is thrown. Workaround: show the message box in the RadMultiColumnComboBox.DropDownClosed event.
To reproduce: DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Name", typeof(string)); for (int i = 0; i < 1; i++) { dt.Rows.Add(i, "Item" + i); } this.radMultiColumnComboBox1.DataSource = dt; this.radMultiColumnComboBox1.DisplayMember = "Name"; this.radMultiColumnComboBox1.ValueMember = "Id"; this.radMultiColumnComboBox1.AutoFilter = true; this.radMultiColumnComboBox1.SelectedIndex = -1; NOTE: If you add more than 1 items, the text won't be changed. Workaround: Public Class CustomRadMultiColumnComboBox Inherits RadMultiColumnComboBox Protected Overrides Function CreateMultiColumnComboBoxElement() As RadMultiColumnComboBoxElement Return New CustomRadMultiColumnComboBoxElement() End Function Public Overrides Property ThemeClassName As String Get Return GetType(RadMultiColumnComboBox).FullName End Get Set(value As String) MyBase.ThemeClassName = value End Set End Property End Class Public Class CustomRadMultiColumnComboBoxElement Inherits RadMultiColumnComboBoxElement Protected Overrides Sub CheckForCompleteMatchAndUpdateText() End Sub Protected Overrides ReadOnly Property ThemeEffectiveType() As Type Get Return GetType(RadMultiColumnComboBoxElement) End Get End Property End Class
To reproduce: radMultiColumnComboBox.AutoFilter = True Dim filter As New Telerik.WinControls.Data.FilterDescriptor() filter.PropertyName = radMultiColumnComboBox.DisplayMember filter.Operator = Telerik.WinControls.Data.FilterOperator.StartsWith radMultiColumnComboBox.EditorControl.MasterTemplate.FilterDescriptors.Add(filter) radMultiColumnComboBox.MultiColumnComboBoxElement.AutoCompleteMode = AutoCompleteMode.SuggestAppend radMultiColumnComboBox.MultiColumnComboBoxElement.LimitToList = True - Select an item, copy the text and then try to paste it.
To reproduice: 1. Add mccb and bind it: Random random = new Random(); DataTable dataTable = new DataTable(); dataTable.Columns.Add("ID", typeof(int)); dataTable.Columns.Add("Name", typeof(string)); dataTable.Columns.Add("Bool", typeof(bool)); dataTable.Columns.Add("DateColumn", typeof(DateTime)); for (int i = 0; i < 20; i++) { dataTable.Rows.Add(i, "Row " + i, random.Next(10) > 5 ? true : false, DateTime.Now.AddDays(i)); } this.radMultiColumnComboBox1.DataSource = dataTable; this.radMultiColumnComboBox1.DisplayMember = "Name"; this.radMultiColumnComboBox1.ValueMember = "Name"; 2. Add filter and subscribe to the event: radMultiColumnComboBox1.AutoFilter = true; FilterDescriptor filter = new FilterDescriptor(); filter.PropertyName = "Name"; filter.Operator = FilterOperator.Contains; this.radMultiColumnComboBox1.EditorControl.MasterTemplate.FilterDescriptors.Add(filter); radMultiColumnComboBox1.SelectedIndexChanged += radMultiColumnComboBox1_SelectedIndexChanged; void radMultiColumnComboBox1_SelectedIndexChanged(object sender, EventArgs e) { Console.WriteLine(string.Format("Row changed, current Name = {0}", radMultiColumnComboBox1.EditorControl.Rows[radMultiColumnComboBox1.SelectedIndex].Cells["Name"].Value)); } 3. Start the app the selected row is "Row 0". Type in "2", the popup will open showing rows "Row 2" and "Row 12". At this point, pressing Esc or moving the focus away from the control selected Row 2, while it shouldn't.
To reproduce: - Add bound MCCB to a form. - Open the form at design time. - Add a control to the form and resize it. - Start the application and and then close the form. - You will get the following error "The designer loader did not provide a root component but has not indicated why".
To reproduce: please refer to the attached sample project which result is illustrated in the attached gif file. The DropDownClosed is expected to be fired when the drop down is already closed. Hence, showing a message box shouldn't keep the drop down opened. The problem is reproducible with RadDropDownList as well. Note that this problem is not applicable for MS ComboBox. Workaround: this.radMultiColumnComboBox1.MultiColumnComboBoxElement.DropDownAnimationEnabled = false;
To reproduce: 1. Add a RadMultiColumnComboBox and set up filtering. 2. Start typing in order to filter all the rows. 3. Click somewhere. As a result the RadMultiColumnComboBox will loose focus. If you try to get the SelectedIndex or SelectedValue you will notice that the first row in the popup grid is current. It is expected to have no selected row as the entered text does not match any row. Workaround: public class CustomRadMultiColumnComboBox : RadMultiColumnComboBox { protected override void OnLostFocus(EventArgs e) { int currentIndex = this.SelectedIndex; base.OnLostFocus(e); this.SelectedIndex = currentIndex; } public override string ThemeClassName { get { return typeof(RadMultiColumnComboBox).FullName; } } }
When you enable the popup sizing functionality, the last user defined size by the sizing grip should be kept.
To reproduce: Add a RadMultiColumnComboBox with one row. Open and close the dropdown, you will see that the scrollbars will show and hide with every openning Workaround: Use the following class: public class MCCB : RadMultiColumnComboBox { protected override RadMultiColumnComboBoxElement CreateMultiColumnComboBoxElement() { return new MCCBElement(); } } public class MCCBElement : RadMultiColumnComboBoxElement { protected override Size GetPopupSize(RadPopupControlBase popup, bool measure) { Size baseSize = base.GetPopupSize(popup, measure); RadScrollBarElement hScrollBarElement = this.EditorControl.TableElement.HScrollBar; baseSize.Height += (int)hScrollBarElement.ControlBoundingRectangle.Size.Height; return baseSize; } protected override Type ThemeEffectiveType { get { return typeof(RadMultiColumnComboBoxElement); } } }
Workaround: create a custom RadMultiColumnComboBox control with a custom element. You can also check the attached project. public class MyRadMultiColumnComboBox : RadMultiColumnComboBox { public override string ThemeClassName { get { return typeof(RadMultiColumnComboBox).FullName; } } protected override RadMultiColumnComboBoxElement CreateMultiColumnComboBoxElement() { return new MyRadMultiColumnComboBoxElement(); } } public class MyRadMultiColumnComboBoxElement : RadMultiColumnComboBoxElement { protected override Type ThemeEffectiveType { get { return typeof(RadMultiColumnComboBoxElement); } } protected override void ProcessKeyDown(object sender, KeyEventArgs e) { base.ProcessKeyDown(sender, e); if (this.IsPopupOpen && (e.KeyCode == Keys.PageDown || e.KeyCode == Keys.PageUp)) { this.EditorControl.GridBehavior.ProcessKey(e); } } }
How to reproduce: check the attached project and video Workaround: create a custom RadMultiColumnComboBoxElement Public Class MyRadMultiColumnComboBox Inherits RadMultiColumnComboBox Public Overrides Property ThemeClassName As String Get Return GetType(RadMultiColumnComboBox).FullName End Get Set(value As String) MyBase.ThemeClassName = value End Set End Property Protected Overrides Function CreateMultiColumnComboBoxElement() As RadMultiColumnComboBoxElement Return New MyRadMultiColumnComboBoxEleemnt() End Function End Class Class MyRadMultiColumnComboBoxEleemnt Inherits RadMultiColumnComboBoxElement Protected Overrides ReadOnly Property ThemeEffectiveType() As Type Get Return GetType(RadMultiColumnComboBoxElement) End Get End Property Protected Overrides Sub SetActiveItem(item As String) Dim rowIndex As Integer = Me.FindItemIndexExact(Text) If rowIndex <> -1 Then Me.textBox.SelectionStart = Me.textBox.Text.Length End If End Sub End Class
Use attached project to reproduce. Workarond: radMultiColumnComboBox1.AutoSize = false; radMultiColumnComboBox1.MinimumSize = new Size(0, 22);
To reproduce: Add a RadMultiColumnComboBox fill it with data and set the following settings: comboBoxColumnElement.EditorControl.AutoSizeRows = true; comboBoxColumnElement.EditorControl.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; comboBoxColumnElement.EditorControl.MasterTemplate.AutoGenerateColumns = false; comboBoxColumnElement.EditorControl.ShowRowHeaderColumn = false; comboBoxColumnElement.EditorControl.ShowFilteringRow = false; comboBoxColumnElement.AutoSize = true; comboBoxColumnElement.AutoFilter = true; comboBoxColumnElement.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.FitToAvailableSize; comboBoxColumnElement.AutoSizeDropDownToBestFit = true; comboBoxColumnElement.DropDownMinSize = new Size(420, 150); comboBoxColumnElement.DropDownSizingMode = SizingMode.UpDownAndRightBottom; When you open the dropdown you will notice that one time the scrollbar will be on the bottom and the next time it will be on the top and so on. Workaround: comboBoxColumnElement.PopupOpened += Popup_Opened;.... Timer timer = new Timer(); private void Popup_Opened(object sender, EventArgs e) { timer.Tick += Tick; timer.Interval = 20; timer.Start(); } private void Tick(object sender, EventArgs e) { comboBoxColumnElement.EditorControl.TableElement.ScrollToRow(comboBoxColumnElement.EditorControl.SelectedRows(0)); timer.Stop(); }
To reproduce: DataTable dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("Description"); dt.Rows.Add(new object[] { "0", "Low" }); dt.Rows.Add(new object[] { "1", "Medium" }); dt.Rows.Add(new object[] { "2", "High" }); radMultiColumnComboBox1.DisplayMember = "ID"; radMultiColumnComboBox1.ValueMember = "ID"; radMultiColumnComboBox1.DataSource = dt; radMultiColumnComboBox1.SelectedValue = "1"; this.radMultiColumnComboBox1.SelectedValueChanged+=radMultiColumnComboBox1_SelectedValueChanged; private void radMultiColumnComboBox1_SelectedValueChanged(object sender, EventArgs e) { Console.WriteLine(this.radMultiColumnComboBox1.SelectedValue); } If you type 2 in the editable part, the SelectedValue is not changed as in the previous version. Workaround: public class MyRadMultiColumnComboBox : RadMultiColumnComboBox { public override string ThemeClassName { get { return typeof(RadMultiColumnComboBox).FullName; } } protected override RadMultiColumnComboBoxElement CreateMultiColumnComboBoxElement() { return new MyRadMultiColumnComboBoxElement(); } } public class MyRadMultiColumnComboBoxElement : RadMultiColumnComboBoxElement { protected override Type ThemeEffectiveType { get { return typeof(RadMultiColumnComboBoxElement); } } protected override void SetActiveItem(string text) { int rowIndex = this.FindItemIndexExact(text); if (rowIndex != -1) { this.EditorControl.CurrentRow = this.EditorControl.Rows[rowIndex]; this.textBox.SelectionStart = this.textBox.Text.Length; } } }
Use attached to reproduce.