When filtering is applied to RadMultiColumnComboBox editor in CellEditorInitialized event of RadGridView, the selected item is second one, if the new row is edited. Workaround: change the event handler by adding the following lines of code in the end of the RadGridView1_CellEditorInitialized: Dim value As Object = e.Row.Cells(e.ColumnIndex).Value If value Is Nothing Then editor.EditorControl.CurrentRow = Nothing Else editor.Value = e.Row.Cells(e.ColumnIndex).Value End If
1. Create a new project and add RadMultiColumnComboBox 2. Bind it and setup filtering 3. Attach to SelectedValueChanged and SelectedIndexChanged events 4. Run the project 5. Apply some filtering and you will see that these events will not fire, regardless that the current row has changed. Work around it by using the EditorControl.CurrentRowChanged event instead of SelectedValueChanged/SelectedIndexChanged events.
To reproduce: DataTable dt = new DataTable(); for (int i = 0; i < 10; i++) { dt.Columns.Add("Column " + i); } for (int i = 0; i < 1000; i++) { dt.Rows.Add(i); } this.radMultiColumnComboBox1.DataSource = dt; this.radMultiColumnComboBox1.DisplayMember = "Column 0"; this.radMultiColumnComboBox1.DropDownSizingMode = SizingMode.UpDown; this.radMultiColumnComboBox1.AutoSizeDropDownToBestFit = true; this.radMultiColumnComboBox1.EditorControl.LoadElementTree(); this.radMultiColumnComboBox1.MultiColumnComboBoxElement.DropDownAnimationEnabled = false; this.radMultiColumnComboBox1.MultiColumnComboBoxElement.ShowPopup(); The columns are autosized but the popup is not sized correctly.
When set the SelectedIndex property in the DropDownClosed event selected index is not set correctly. Workaround: private void radMultiColumnComboBox1_DropDownClosed(object sender, Telerik.WinControls.UI.RadPopupClosedEventArgs args) { this.radMultiColumnComboBox1.SelectedIndex = 0; this.radMultiColumnComboBox1.EditorControl.CurrentRowChanging += new CurrentRowChangingEventHandler(EditorControl_CurrentRowChanging); } void EditorControl_CurrentRowChanging(object sender, CurrentRowChangingEventArgs e) { e.Cancel = true; this.radMultiColumnComboBox1.EditorControl.CurrentRowChanging -= EditorControl_CurrentRowChanging; }
To reproduce: public partial class Form1 : Form { public Form1() { InitializeComponent(); Random r = new Random(); DataTable table = new DataTable(); table.Columns.Add("ID", typeof(int)); table.Columns.Add("Name", typeof(string)); for (int i = 0; i < 10; i++) { table.Rows.Add(i, "Row with longer value " + i); } radMultiColumnComboBox1.DropDownOpening += radMultiColumnComboBox1_DropDownOpening; radMultiColumnComboBox1.AutoSizeDropDownToBestFit = true; radMultiColumnComboBox1.DataSource = table; } void radMultiColumnComboBox1_DropDownOpening(object sender, CancelEventArgs args) { // radMultiColumnComboBox1.BestFitColumns(); } private void button1_Click(object sender, EventArgs e) { Random r = new Random(); DataTable table = new DataTable(); table.Columns.Add("ID", typeof(int)); table.Columns.Add("Name", typeof(string)); for (int i = 0; i < 10; i++) { table.Rows.Add(i, "Row " + i); } radMultiColumnComboBox1.DataSource = table; } } WORKAROUND: call the BestFitColumns method in the DropDownOpening event
Workaround: radMultiColumnComboBox1.DropDownOpening += new RadPopupOpeningEventHandler(radMultiColumnComboBox1_DropDownOpening); .... void radMultiColumnComboBox1_DropDownOpening(object sender, CancelEventArgs args) { int width = 0; foreach (GridViewDataColumn col in radMultiColumnComboBox1.EditorControl.Columns) { width += col.Width; } radMultiColumnComboBox1.MultiColumnComboBoxElement.MultiColumnPopupForm.MinimumSize = new Size(width, 0); }
To reproduce: - The attached video shows how you can reproduce the issue Note - you should type fast in the drop down and the size is invalid only the firs time. Workaround: RadMultiColumnComboBox1.MultiColumnComboBoxElement.DropDownAnimationEnabled = False
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: 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 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(); }
Use attached to reproduce.
Hello,
I'm facing a problem with the MulticolumnCombobox that results in an SelectedValueChanged-Event when the list is dropped down the first time after data source was set. Please use the attached project for reproducing the problem using the following steps:
==> As the MulticolumnCombobox performs different based on the culture, this seems to be a bug.
If you need further information, please do not hestitate to ask.
Populate RadMultiColumnComboBox with data and enable the auto filter functionality. Apply a CompositeFilterDescriptor with two text columns. Try to filter entering several letters and press Tab. You will notice that the SelectedIndexChanged event is not fired in this case. However, if only one FilterDescriptor is added, not a CompositeFilterDescriptor, the selection will be properly updated.
Please refer to the attached sample project and gif file which illustrates the behavior.
Use the following code and try to scroll item by item with the mouse wheel:
public RadForm1()
{
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.DisplayMember = "Name";
this.radMultiColumnComboBox1.ValueMember = "Id";
this.radMultiColumnComboBox1.DataSource = dt;
this.radMultiColumnComboBox1.ScrollOnMouseWheel = true;
this.radMultiColumnComboBox1.SelectedValueChanged+=radMultiColumnComboBox1_SelectedValueChanged;
}
private void radMultiColumnComboBox1_SelectedValueChanged(object sender, EventArgs e)
{
Console.WriteLine("Value: "+this.radMultiColumnComboBox1.SelectedValue);
}
Expected behavior: one item is scrolled at a time
Actual behavior: two items are scrolled at a time
Note: RadDropDownList behaves as expected.
In this particular case, the RadMultiColumnComboBoxElement is used as a custom editor inside RadPropertyGrid control. When the editor is shown it needs to be opened 3 times to correctly calculate its width. In addition, the font is scaled twice:
Steps to reproduce: 1) Add RadGridView control 2) Add GridViewMultiComboBoxColumn column: GridViewMultiComboBoxColumn multiCoomboBoxColumn = new GridViewMultiComboBoxColumn(); multiCoomboBoxColumn.DataSource = customTable; Workaround: do not set the DropDownHeight property. Instead, you could set the AutoSizeDropDownToBestFit property to true and the MaxDropDownItems property, which gets or sets the maximum number of items to be shown in the drop-down portion. Here is a sample code snippet: RadMultiColumnComboBoxElement element = e.ActiveEditor as RadMultiColumnComboBoxElement; element.AutoSizeDropDownToBestFit = true; element.MaxDropDownItems = 20;
To reproduce: private void Form1_Load(object sender, EventArgs e) { this.categoriesTableAdapter.Fill(this.nwindDataSet.Categories); this.radMultiColumnComboBox1.DataSource = this.categoriesBindingSource; this.radMultiColumnComboBox1.DisplayMember = "CategoryName"; this.radMultiColumnComboBox1.ValueMember = "CategoryID"; this.radMultiColumnComboBox1.EditorControl.EnableFiltering = true; this.radMultiColumnComboBox1.EditorControl.ShowHeaderCellButtons = true; } Workaround: public Form1() { InitializeComponent(); this.radMultiColumnComboBox1.MultiColumnComboBoxElement.PopupClosing += MultiColumnComboBoxElement_PopupClosing; this.radMultiColumnComboBox1.EditorControl.FilterPopupInitialized += EditorControl_FilterPopupInitialized; } private void EditorControl_FilterPopupInitialized(object sender, FilterPopupInitializedEventArgs e) { RadListFilterPopup filterPopup = e.FilterPopup as RadListFilterPopup; if (filterPopup != null) { filterPopup.PopupOpened -= filterPopup_PopupOpened; filterPopup.PopupOpened += filterPopup_PopupOpened; filterPopup.PopupClosed -= filterPopup_PopupClosed; filterPopup.PopupClosed += filterPopup_PopupClosed; } } bool shouldCancel = false; private void filterPopup_PopupClosed(object sender, RadPopupClosedEventArgs args) { shouldCancel = false; } private void filterPopup_PopupOpened(object sender, EventArgs args) { shouldCancel = true; } private void MultiColumnComboBoxElement_PopupClosing(object sender, RadPopupClosingEventArgs args) { args.Cancel = shouldCancel; }