Completed
Last Updated: 23 Aug 2016 13:18 by Jesse Dyck
ADMIN
Created by: Georgi I. Georgiev
Comments: 1
Category: MultiColumnCombo
Type: Bug Report
5
To reproduce:
Create a create a class with Properties Id, Name, ParentId

this.multiColumnComboBox.MultiColumnComboBoxElement
    .EditorControl.Relations.AddSelfReference(this.multiColumnComboBox.MultiColumnComboBoxElement.EditorControl.MasterTemplate, "Id", "ParentId");

this.multiColumnComboBox.DataSource = this.people;
this.multiColumnComboBox.DisplayMember = "Name";
this.multiColumnComboBox.ValueMember = "Id";

this.multiColumnComboBox.AutoFilter = true;
this.multiColumnComboBox.DisplayMember = "Name";
FilterDescriptor filter = new FilterDescriptor();
filter.PropertyName = this.multiColumnComboBox.DisplayMember;
filter.Operator = FilterOperator.Contains;
this.multiColumnComboBox.EditorControl.MasterTemplate.FilterDescriptors.Add(filter);

When you open the popup exception should occur.
Completed
Last Updated: 19 Aug 2016 09:51 by ADMIN
To reproduce:
Create a ListView or GridView cell element. For example:
public class FilterGroupByCell : DetailListViewDataCellElement
    {
        private RadMultiColumnComboBoxElement multiColumnComboBox = new RadMultiColumnComboBoxElement();
        public FilterGroupByCell(DetailListViewVisualItem owner, ListViewDetailColumn column) :
            base(owner, column) { }

        protected override void CreateChildElements()
        {
            base.CreateChildElements();

            this.multiColumnComboBox.AutoSizeDropDownToBestFit = true;
            multiColumnComboBox.DropDownSizingMode = SizingMode.UpDownAndRightBottom;
            multiColumnComboBox.EditorControl.MasterTemplate.AutoGenerateColumns = false;

            GridViewTextBoxColumn column = new GridViewTextBoxColumn("CustomerID");
            column.HeaderText = "Customer ID";
            multiColumnComboBox.Columns.Add(column);
            column = new GridViewTextBoxColumn("ContactName");
            column.HeaderText = "Contact Name";
            multiColumnComboBox.Columns.Add(column);
            column = new GridViewTextBoxColumn("ContactTitle");
            column.HeaderText = "Contact Title";
            multiColumnComboBox.Columns.Add(column);
            column = new GridViewTextBoxColumn("Country");
            column.HeaderText = "Country";
            multiColumnComboBox.Columns.Add(column);
            column = new GridViewTextBoxColumn("Phone");
            column.HeaderText = "Phone";
            multiColumnComboBox.Columns.Add(column);

            this.Children.Add(multiColumnComboBox);
        }

        public override void Synchronize()
        {
            base.Synchronize();
            this.Text = "";

            if (base.Row == null)
            {
                return;
            }

            this.CurrentFilter = (MFilter)base.Row.DataBoundItem;

            if (CurrentFilter.CustomListRecordId == "1")
                multiColumnComboBox.Visibility = Telerik.WinControls.ElementVisibility.Collapsed;

            DataTable table1 = new DataTable("test");
            table1.Columns.Add("CustomerID");
            table1.Columns.Add("ContactName");
            table1.Columns.Add("ContactTitle");
            table1.Columns.Add("Country");
            table1.Columns.Add("Phone");

            table1.Rows.Add(1, "Ivan Petrov", "2", "2", "2");
            table1.Rows.Add(2, "Stefan Muler", "2", "2", "2");
            table1.Rows.Add(3, "Alexandro Ricco", "2", "2", "2");

            multiColumnComboBox.DataSource = table1;
            multiColumnComboBox.DisplayMember = "ContactName";
        }

        public MFilter CurrentFilter { get; set; }
    }

Workaround:
Create a custom RadMultiColumnComboBoxElement:
public class MyRadMultiColumnComboBoxElement : RadMultiColumnComboBoxElement
{
    protected override void OnParentChanged(Telerik.WinControls.RadElement previousParent)
    {
        if (this.IsPopupOpen)
        {
            this.ClosePopup(RadPopupCloseReason.CloseCalled);
        }

        if (this.Parent != null && this.Parent.ElementTree != null && this.Parent.ElementTree.Control is RadGridView)
        {
            base.OnParentChanged(previousParent);
        }
    }

    protected override Type ThemeEffectiveType
    {
        get
        {
            return typeof(RadMultiColumnComboBoxElement);
        }
    }
}

In order to be able to set a DataSource you need to create a new BindingContext prior setting setting the DataSource:

DataTable table1 = new DataTable("test");
table1.Columns.Add("CustomerID");
table1.Columns.Add("ContactName");
table1.Columns.Add("ContactTitle");
table1.Columns.Add("Country");
table1.Columns.Add("Phone");

table1.Rows.Add(1, "Ivan Petrov", "2", "2", "2");
table1.Rows.Add(2, "Stefan Muler", "2", "2", "2");
table1.Rows.Add(3, "Alexandro Ricco", "2", "2", "2");

multiColumnComboBox.EditorControl.BindingContext = new System.Windows.Forms.BindingContext();
multiColumnComboBox.DataSource = table1;
multiColumnComboBox.DisplayMember = "ContactName";

Completed
Last Updated: 29 Jul 2016 13:58 by ADMIN
Currently there is not support for simple binding for this property.
Declined
Last Updated: 19 Jul 2016 14:17 by ADMIN
To reproduce:
void radMultiColumnComboBox1_SelectedValueChanged(object sender, EventArgs e)
{
    MessageBox.Show("test");
}
Completed
Last Updated: 19 Jul 2016 14:16 by ADMIN
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.
Unplanned
Last Updated: 06 May 2016 13:42 by ADMIN
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. 
Unplanned
Last Updated: 06 May 2016 08:49 by ADMIN
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
Unplanned
Last Updated: 06 Apr 2016 15:27 by ADMIN
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
Unplanned
Last Updated: 30 Mar 2016 09:34 by ADMIN
To reproduce:
- Add 200k rows and the call the BestFitColumns method like this (only the visual rows should be measured in this case):
this.radMultiColumnComboBox.BestFitColumns(true, false);

Workaround:
Set the AutoSizeDropDownColumnMode before calling the method:
this.radMultiColumnComboBox.MultiColumnComboBoxElement.AutoSizeDropDownColumnMode = BestFitColumnMode.DisplayedCells;
this.radMultiColumnComboBox.BestFitColumns(true, false);
Unplanned
Last Updated: 30 Mar 2016 09:33 by ADMIN
To reproduce:
- Bind the control and set the auto filter functionality.
- Type a value and press the tab key or click ouside of the control.
- Subscribe to the DropDownClosed event and observe that the SelectedValue and the text are different.

Workaround:
void radMultiColumnComboBox1_DropDownClosed(object sender, Telerik.WinControls.UI.RadPopupClosedEventArgs args)
{
    this.radMultiColumnComboBox1.Text = this.radMultiColumnComboBox1.SelectedValue.ToString();
}

Unplanned
Last Updated: 30 Mar 2016 09:32 by ADMIN
To reproduce:
- Add some items to the control and set the DropDownAnimationEnabled to false.
- Programmatically select the  third item
- Start the application, open the drop down and scroll up with the mouse - you will notice that the grid is not scrolled up.

Workaround:
Set DropDownAnimationEnabled to true.
Unplanned
Last Updated: 30 Mar 2016 09:32 by ADMIN
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;
 }
Unplanned
Last Updated: 30 Mar 2016 09:31 by Svetlin
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
Unplanned
Last Updated: 30 Mar 2016 09:31 by ADMIN
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
Unplanned
Last Updated: 30 Mar 2016 09:29 by ADMIN
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);
             
        }
Unplanned
Last Updated: 30 Mar 2016 09:26 by Svetlin
Unplanned
Last Updated: 30 Mar 2016 09:22 by Jesse Dyck
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;
Unplanned
Last Updated: 30 Mar 2016 09:19 by ADMIN
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; 

} 
Completed
Last Updated: 08 Jan 2016 06:29 by ADMIN
Steps to reproduce:
1. Select the radMultiColumnsComboBox1 at Design time
2. Press F4 for showing Properties
3. Open Columns editor (GridViewDataColumn Collection Editor)
4. Try to add a column
Error Message: Cannot create an instance of the abstract class or interface 'Telerik.WinControls.UI.GridViewDataColumn' because it is an abstract class.