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.
Use attached to reproduce.
Using AutoCompleteMode.SuggestAppend caused other issues and I changed it to Suggest.
In the example program I provided if I type in "meadows " meadows and a space I should get the following Suggested List.
SUGGESTED LIST
Meadows Green
However I get " Meadows" selected with a space at the front of the word.
Sample program that illustrates the issue can be downloaded from here: https://www.dropbox.com/s/8qxhmxai0y4w7qg/FilterMultiColumn.zip?dl=0
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.
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.
Use attached to reproduce. - There is still space at the bottom of the grid. Workaround: class MCCM : RadMultiColumnComboBox { protected override RadMultiColumnComboBoxElement CreateMultiColumnComboBoxElement() { return new MCCBElement(); } } class MCCBElement : RadMultiColumnComboBoxElement { protected override Type ThemeEffectiveType { get { return typeof(RadMultiColumnComboBoxElement);} } protected override Size GetPopupSize(RadPopupControlBase popup, bool measure) { var result = base.GetPopupSize(popup, measure); GridTableElement tableElement = this.EditorControl.TableElement; int height = 0; GridTraverser traverser = new GridTraverser(this.EditorControl.MasterView); RowElementProvider rowElementProvider = (RowElementProvider)tableElement.RowScroller.ElementProvider; while (traverser.MoveNext()) { height += (int)rowElementProvider.GetElementSize(traverser.Current).Height; height += this.EditorControl.TableElement.RowSpacing; } return new Size(result.Width, height +1); } }
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.
Use attached to reproduce: - Press button1, open the drop-down and use the mouse wheel. Workaround: class MyMultiColumnComboPopupForm : MultiColumnComboPopupForm { public MyMultiColumnComboPopupForm(PopupEditorBaseElement owner) : base(owner) { } public override bool OnMouseWheel(Control target, int delta) { return true; } } class MyMCCB : RadMultiColumnComboBox { protected override RadMultiColumnComboBoxElement CreateMultiColumnComboBoxElement() { return new MyMCCBElement(); } } class MyMCCBElement : RadMultiColumnComboBoxElement { protected override Type ThemeEffectiveType { get { return typeof(RadMultiColumnComboBoxElement); } } protected override RadPopupControlBase CreatePopupForm() { var popupForm = new MyMultiColumnComboPopupForm(this); popupForm.EditorControl.Focusable = false; popupForm.MinimumSize = this.DropDownMaxSize; popupForm.MaximumSize = this.DropDownMaxSize; popupForm.Height = this.DropDownHeight; popupForm.VerticalAlignmentCorrectionMode = AlignmentCorrectionMode.SnapToOuterEdges; popupForm.HorizontalAlignmentCorrectionMode = AlignmentCorrectionMode.Smooth; popupForm.RightToLeft = this.RightToLeft ? System.Windows.Forms.RightToLeft.Yes : System.Windows.Forms.RightToLeft.Inherit; this.WirePopupFormEvents(popupForm); return popupForm; } }
To reproduce: - Add a GridViewMultiComboBoxColumn to a grid with wide columns. - Call the following code in the CellEditorInitialized event handler editor.EditorControl.LoadElementTree(); editor.AutoSizeDropDownHeight = true; editor.AutoSizeDropDownColumnMode = BestFitColumnMode.AllCells; editor.BestFitColumns(true, true); - The drop down still has a horizontal scrollbar. Workaround: editor.EditorControl.BestFitColumns(BestFitColumnMode.AllCells); int desiredWidth = 0; foreach (GridViewColumn column in editor.EditorControl.TableElement.ViewElement.RowLayout.RenderColumns) { desiredWidth += column.Width + editor.EditorControl.TableElement.CellSpacing; desiredWidth -= editor.EditorControl.TableElement.CellSpacing; } editor.DropDownWidth = desiredWidth + 20;//20 in case the vertical scroll appears.
Currently, in RadMultiColumnComboBox, if you AutoFilter by all columns and you type a value that resides in the ID column, while the DisplayMember is the Name, pressing the Enter after typing the ID will return the Name in the textbox part which may be confusing to the user. Such a case may be solved by introducing another textbox in the drop-down part just for filtering purposes.
Currently RadMultiColumnComboBox uses exact comparison and it is not possible to change this behavior.
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(); }
When you enable the popup sizing functionality, the last user defined size by the sizing grip should be kept.
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.
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: - 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