more GridViewMultiComboBoxColumn(s) in a grid

11 posts, 2 answers
  1. Ferry Engels
    Ferry Engels avatar
    3 posts
    Member since:
    Feb 2010

    Posted 14 Feb 2011 Link to this post

    Hello,

    I have a question about the GridViewMultiComboBoxColumn editor.
    I use 3 GridViewMultiComboBoxColumn(s) in my grid and i want all of them filled with 2 pull-down columns.

    In the example on the site it is simple to get one GridViewMultiComboBoxColumn working.
    But how do i get the other 2 filled. I tried to managed it by using there name in the code but that doesn't work.
    Is there a simple way to fill them all.

    The grid is created in code not in design-time.

    Thanks

    Ferry
  2. Answer
    Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 14 Feb 2011 Link to this post

    Hello Ferry,

    Adding additional columns will be the same as adding the first one.

    Here is a sample for you that you can paste straight into a new project.

    Designer File
    namespace RadGridView_MultiComboColumn
    {
        partial class Form1
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components;
      
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
      
            #region Windows Form Designer generated code
      
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.radGridView1 = new Telerik.WinControls.UI.RadGridView();
                ((System.ComponentModel.ISupportInitialize)(this.radGridView1)).BeginInit();
                this.SuspendLayout();
                // 
                // radGridView1
                // 
                this.radGridView1.BackColor = System.Drawing.SystemColors.Control;
                this.radGridView1.Cursor = System.Windows.Forms.Cursors.Default;
                this.radGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
                this.radGridView1.Font = new System.Drawing.Font("Segoe UI", 8.25F);
                this.radGridView1.ForeColor = System.Drawing.SystemColors.ControlText;
                this.radGridView1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
                this.radGridView1.Location = new System.Drawing.Point(0, 0);
                this.radGridView1.Name = "radGridView1";
                this.radGridView1.RightToLeft = System.Windows.Forms.RightToLeft.No;
                this.radGridView1.Size = new System.Drawing.Size(464, 262);
                this.radGridView1.TabIndex = 0;
                this.radGridView1.Text = "radGridView1";
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(464, 262);
                this.Controls.Add(this.radGridView1);
                this.Name = "Form1";
                this.Text = "Form1";
                this.Load += new System.EventHandler(this.Form1_Load);
                ((System.ComponentModel.ISupportInitialize)(this.radGridView1)).EndInit();
                this.ResumeLayout(false);
      
            }
      
            #endregion
      
            private Telerik.WinControls.UI.RadGridView radGridView1;
        }
    }

    Form1.cs
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Telerik.WinControls.UI;
      
    namespace RadGridView_MultiComboColumn
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
      
            private void Form1_Load(object sender, EventArgs e)
            {
                this.radGridView1.AutoGenerateColumns = false;
      
                // build cars data source
                BindingList<Car> cars = new BindingList<Car>();
                for(int i = 0; i < 5;i++)
                {
                    cars.Add(new Car(i, "BMW 12" + i.ToString()));
                }
      
                // build schools data source
                BindingList<School> schools = new BindingList<School>();
                for (int i = 0; i < 5; i++)
                {
                    schools.Add(new School(i, "School " + i.ToString()));
                }
      
                // build workplace data source
                BindingList<Workplace> workplaces = new BindingList<Workplace>();
                for (int i = 0; i < 5; i++)
                {
                    workplaces.Add(new Workplace(i, "Workplace " + i.ToString()));
                }
      
                // build person data source
                BindingList<Person> people = new BindingList<Person>();
                for (int i = 0; i < 5; i++)
                {
                    people.Add(new Person(i, "Name " + i.ToString(), i, i, i));
                }
      
                GridViewDecimalColumn idColumn = new GridViewDecimalColumn();
                idColumn.HeaderText = "PersonId";
                idColumn.FieldName = "Id";
                idColumn.Name = "Id";
      
                GridViewTextBoxColumn nameColumn = new GridViewTextBoxColumn();
                nameColumn.HeaderText = "Name";
                nameColumn.FieldName = "Name";
                nameColumn.Name = "Name";
      
                GridViewMultiComboBoxColumn carColumn = new GridViewMultiComboBoxColumn();
                carColumn.DataSource = cars;
                carColumn.HeaderText = "Car";
                carColumn.DisplayMember = "Name";
                carColumn.ValueMember = "Id";
                carColumn.FieldName = "CarId";
      
                GridViewMultiComboBoxColumn schoolColumn = new GridViewMultiComboBoxColumn();
                schoolColumn.DataSource = schools;
                schoolColumn.HeaderText = "School";
                schoolColumn.DisplayMember = "Name";
                schoolColumn.ValueMember = "Id";
                schoolColumn.FieldName = "SchoolId";
      
                GridViewMultiComboBoxColumn workplaceColumn = new GridViewMultiComboBoxColumn();
                workplaceColumn.DataSource = workplaces;
                workplaceColumn.HeaderText = "Workplace";
                workplaceColumn.DisplayMember = "Name";
                workplaceColumn.ValueMember = "Id";
                workplaceColumn.FieldName = "WorkplaceId";
      
                this.radGridView1.Columns.Add(idColumn);
                this.radGridView1.Columns.Add(nameColumn);
                this.radGridView1.Columns.Add(carColumn);
                this.radGridView1.Columns.Add(schoolColumn);
                this.radGridView1.Columns.Add(workplaceColumn);
                this.radGridView1.DataSource = people;
      
            }
        }
      
        public class Person
        {
            public Person(int Id, string name, int carId, int schoolId, int workplaceId)
            {
                this.Id = Id;
                this.Name = name;
                this.CarId = carId;
                this.SchoolId = schoolId;
                this.WorkplaceId = workplaceId;
            }
      
            public int Id
            { get; set; }
      
            public string Name
            { get; set; }
      
            public int CarId
            { get; set; }
      
            public int SchoolId
            { get; set; }
      
            public int WorkplaceId
            { get; set; }
        }
      
        public class Car
        {
            public Car(int Id, string name)
            {
                this.Id = Id;
                this.Name = name;
            }
      
            public int Id
            { get; set; }
      
            public string Name
            { get; set; }
        }
      
        public class School
        {
            public School(int Id, string name)
            {
                this.Id = Id;
                this.Name = name;
            }
      
            public int Id
            { get; set; }
      
            public string Name
            { get; set; }
        }
      
        public class Workplace
        {
            public Workplace(int Id, string name)
            {
                this.Id = Id;
                this.Name = name;
            }
      
            public int Id
            { get; set; }
      
            public string Name
            { get; set; }
        }
    }

    You might also be interested to see the documentation for this column type which can be found here
    Hope that helps
    Richard
  3. UI for WinForms is Visual Studio 2017 Ready
  4. Ferry Engels
    Ferry Engels avatar
    3 posts
    Member since:
    Feb 2010

    Posted 15 Feb 2011 Link to this post

    Thanks Richard but it is not what i ment.

    It is no problem to place more MultiComboBoxColums in my grid.
    Also no problem to add a datasource to them.
    But to get 2 columns when i click on the editor (just like the example were you are referring to) works in that example only on one MultiComboBoxColumn.
    I want to fill all three MultiComboBoxColumns like that way.
    I can't find any example to do that.

    ps. my project is in VB

    Ferry
  5. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 15 Feb 2011 Link to this post

    Hello Ferry,

    Here is a VB exmaple as per the example at the link where it has more than one column as a multicolumncombo, each with two columns.

    Designer File
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class Form1
        Inherits System.Windows.Forms.Form
      
        'Form overrides dispose to clean up the component list.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
      
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.IContainer
      
        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.  
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            Me.RadGridView1 = New Telerik.WinControls.UI.RadGridView()
            CType(Me.RadGridView1, System.ComponentModel.ISupportInitialize).BeginInit()
            Me.SuspendLayout()
            '
            'RadGridView1
            '
            Me.RadGridView1.Dock = System.Windows.Forms.DockStyle.Fill
            Me.RadGridView1.Location = New System.Drawing.Point(0, 0)
            Me.RadGridView1.Name = "RadGridView1"
            Me.RadGridView1.Size = New System.Drawing.Size(383, 327)
            Me.RadGridView1.TabIndex = 0
            Me.RadGridView1.Text = "RadGridView1"
            '
            'Form1
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.ClientSize = New System.Drawing.Size(383, 327)
            Me.Controls.Add(Me.RadGridView1)
            Me.Name = "Form1"
            Me.Text = "Form1"
            CType(Me.RadGridView1, System.ComponentModel.ISupportInitialize).EndInit()
            Me.ResumeLayout(False)
      
        End Sub
        Friend WithEvents RadGridView1 As Telerik.WinControls.UI.RadGridView
      
    End Class

    Form1.vb
    Imports Telerik.WinControls.UI
    Imports System.ComponentModel
      
    Public Class Form1
      
        Private orderColumnAdded As Boolean
        Private devColumnAdded As Boolean
      
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim orderList As New BindingList(Of Order)()
            orderList.Add(New Order(1234, 1))
            orderList.Add(New Order(1324, 12))
            orderList.Add(New Order(2345, 34))
      
            Dim devList As New BindingList(Of DevEnv)()
            devList.Add(New DevEnv(1, "VS 2005"))
            devList.Add(New DevEnv(2, "VS 2008"))
            devList.Add(New DevEnv(3, "VS 2010"))
      
            Dim people As New BindingList(Of Person)()
            people.Add(New Person("Richard", 1234, 3))
            people.Add(New Person("Ferry", 2345, 2))
      
            Dim colName As GridViewTextBoxColumn = New GridViewTextBoxColumn()
            colName.FieldName = "Name"
            colName.HeaderText = "Name"
            Me.RadGridView1.Columns.Add(colName)
      
            Dim colOrder As GridViewMultiComboBoxColumn = New GridViewMultiComboBoxColumn()
            colOrder.DataSource = orderList
            colOrder.DisplayMember = "Quantity"
            colOrder.ValueMember = "OrderID"
            colOrder.FieldName = "OrderID"
            colOrder.HeaderText = "Order Num"
            Me.RadGridView1.Columns.Add(colOrder)
      
            Dim colDev As GridViewMultiComboBoxColumn = New GridViewMultiComboBoxColumn()
            colDev.DataSource = devList
            colDev.DisplayMember = "DevName"
            colDev.ValueMember = "DevId"
            colDev.FieldName = "DevId"
            colDev.HeaderText = "Dev Environment"
            Me.RadGridView1.Columns.Add(colDev)
      
      
            AddHandler RadGridView1.CellBeginEdit, AddressOf radGridView1_CellBeginEdit
      
            Me.RadGridView1.DataSource = people
        End Sub
      
        Private Sub radGridView1_CellBeginEdit(ByVal sender As Object, ByVal e As GridViewCellCancelEventArgs)
            If Me.RadGridView1.CurrentColumn.Name = "OrderId" Then
                If (Not orderColumnAdded) Then
                    orderColumnAdded = True
                    Dim editor As RadMultiColumnComboBoxElement = CType(Me.RadGridView1.ActiveEditor, RadMultiColumnComboBoxElement)
                    editor.EditorControl.MasterTemplate.AutoGenerateColumns = False
                    editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("OrderID"))
                    editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("Quantity"))
                    editor.AutoSizeDropDownToBestFit = True
                End If
            End If
            If Me.RadGridView1.CurrentColumn.Name = "DevId" Then
                If (Not devColumnAdded) Then
                    devColumnAdded = True
                    Dim editor As RadMultiColumnComboBoxElement = CType(Me.RadGridView1.ActiveEditor, RadMultiColumnComboBoxElement)
                    editor.EditorControl.MasterTemplate.AutoGenerateColumns = False
                    editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("DevId"))
                    editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("DevName"))
                    editor.AutoSizeDropDownToBestFit = True
                End If
            End If
        End Sub
    End Class
      
    Public Class Order
        Public Sub New(ByVal orderId As Integer, ByVal orderQty As Integer)
            Me.OrderId = orderId
            Me.Quantity = orderQty
        End Sub
      
        Public Property OrderId As Integer
        Public Property Quantity As Integer
    End Class
      
    Public Class DevEnv
        Public Sub New(ByVal devId As Integer, ByVal devName As String)
            Me.DevId = devId
            Me.DevName = devName
        End Sub
      
        Public Property DevId As Integer
        Public Property DevName As String
    End Class
      
    Public Class Person
        Public Sub New(ByVal Name As String, ByVal orderId As Integer, ByVal devId As Integer)
            Me.Name = Name
            Me.OrderId = orderId
            Me.DevId = devId
        End Sub
      
        Public Property OrderId As Integer
        Public Property DevId As Integer
        Public Property Name As String
    End Class

    Hope that helps but let me know if you need more information
    Richard
  6. Ferry Engels
    Ferry Engels avatar
    3 posts
    Member since:
    Feb 2010

    Posted 15 Feb 2011 Link to this post

    Richard,

    Thank you for such a quick reply.

    This is what i ment. But it works not the way it should be.
    When i click on the first MultiComboBoxColumn i got 2 colums belonging to that  MultiComboBoxColumn.
    Then when i click on the second  MultiComboBoxColumn i get 4 colums, 2 from the first (without data in it) and 2 from the  MultiComboBoxColumn that i clicked on.
    When i click on the first again it display also 4 columns (the other way around).
    I followd the code in debug mode and the code works the way it should be.

    Then i tried to clear the colums before filling them, that works but the next problem is that i get second time i clicked the same  MultiComboBoxColumn  i get a null reference error.

    So i removed the flags and now it works because the colums are filled every time i click on them.

    So now it is working but is this the right approuch. It feels not right do you now what i mean.

    i included my code

    But many thanks,

    Ferry

    Private Sub radGridView1_CellBeginEdit(ByVal sender As Object, ByVal e As GridViewCellCancelEventArgs)
          If TypeOf Me.RadGridView1.CurrentColumn Is GridViewMultiComboBoxColumn Then
              If Me.RadGridView1.CurrentColumn.Name = "CodeColumn" Then
                  If (Not isCodeColumnAdded) Then
                      'isCodeColumnAdded = True
                      Dim editor1 As RadMultiColumnComboBoxElement = CType(Me.RadGridView1.ActiveEditor, RadMultiColumnComboBoxElement)
                      editor1.EditorControl.MasterTemplate.AutoGenerateColumns = False
                      editor1.EditorControl.Columns.Clear()
                      editor1.EditorControl.Columns.Add(New GridViewTextBoxColumn("FaktCode"))
                      editor1.EditorControl.Columns.Add(New GridViewTextBoxColumn("FaktRegel"))
                      editor1.AutoSizeDropDownToBestFit = True
                  End If
              End If
              If Me.RadGridView1.CurrentColumn.Name = "KpltsColumn" Then
                  If (Not isKsPltsColumnAdded) Then
                      'isKsPltsColumnAdded = True
                      Dim editor2 As RadMultiColumnComboBoxElement = CType(Me.RadGridView1.ActiveEditor, RadMultiColumnComboBoxElement)
                      editor2.EditorControl.MasterTemplate.AutoGenerateColumns = False
                      editor2.EditorControl.Columns.Clear()
                      editor2.EditorControl.Columns.Add(New GridViewTextBoxColumn("Kostenplaats"))
                      editor2.EditorControl.Columns.Add(New GridViewTextBoxColumn("Omschrijving"))
                      editor2.AutoSizeDropDownToBestFit = True
                  End If
              End If
          End If
      End Sub
  7. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 15 Feb 2011 Link to this post

    Hi Ferry,

    Apologies. I should have picked that up. The reason for this is that the ActiveEditor already has the columns (the editors in RadGridView are re-used). You cannot clear them in this way. try clicking on the first row, first column, then the first row, second column, then the first row first column again. This throws a null reference exception.

    I'm a little fried to continue tonight (it's after midnight here), but I'll look again in the morning for you. The documentation states about having this 'dirty' flag to ensure columns are not re-created, and in theory, this should be simple to get it working for more than one. I'll look again tomorrow when I'm a bit fresher. Sorry I couldn't get that sorted for you tonight.
    Richard
  8. Answer
    Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 16 Feb 2011 Link to this post

    Hi Ferry,

    ok, as you said you need to clear the columns. The RadGridView as I mentioned re-uses it's editors so using more than one it's required to clear them first. For reference, here is my example again which is now working correctly.

    Imports Telerik.WinControls.UI
    Imports System.ComponentModel
      
    Public Class Form1
      
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim orderList As New BindingList(Of Order)()
            orderList.Add(New Order(1234, 1))
            orderList.Add(New Order(1324, 12))
            orderList.Add(New Order(2345, 34))
      
            Dim devList As New BindingList(Of DevEnv)()
            devList.Add(New DevEnv(1, "VS 2005"))
            devList.Add(New DevEnv(2, "VS 2008"))
            devList.Add(New DevEnv(3, "VS 2010"))
      
            Dim people As New BindingList(Of Person)()
            people.Add(New Person("Richard", 1234, 3))
            people.Add(New Person("Ferry", 2345, 2))
      
            Dim colName As GridViewTextBoxColumn = New GridViewTextBoxColumn()
            colName.FieldName = "Name"
            colName.HeaderText = "Name"
            Me.RadGridView1.Columns.Add(colName)
      
            Dim colOrder As GridViewMultiComboBoxColumn = New GridViewMultiComboBoxColumn()
            colOrder.DataSource = orderList
            colOrder.DisplayMember = "Quantity"
            colOrder.ValueMember = "OrderID"
            colOrder.FieldName = "OrderID"
            colOrder.HeaderText = "Order Num"
            Me.RadGridView1.Columns.Add(colOrder)
      
            Dim colDev As GridViewMultiComboBoxColumn = New GridViewMultiComboBoxColumn()
            colDev.DataSource = devList
            colDev.DisplayMember = "DevName"
            colDev.ValueMember = "DevId"
            colDev.FieldName = "DevId"
            colDev.HeaderText = "Dev Environment"
            Me.RadGridView1.Columns.Add(colDev)
      
            Me.RadGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill
      
            AddHandler RadGridView1.CellBeginEdit, AddressOf radGridView1_CellBeginEdit
      
            Me.RadGridView1.DataSource = people
        End Sub
      
        Private Sub radGridView1_CellBeginEdit(ByVal sender As Object, ByVal e As GridViewCellCancelEventArgs)
            If TypeOf RadGridView1.CurrentColumn Is GridViewMultiComboBoxColumn Then
                Dim editor As RadMultiColumnComboBoxElement = CType(Me.RadGridView1.ActiveEditor, RadMultiColumnComboBoxElement)
                editor.EditorControl.MasterTemplate.AutoGenerateColumns = False
                editor.EditorControl.Columns.Clear()
                If Me.RadGridView1.CurrentColumn.Name = "OrderID" Then
                    editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("OrderID"))
                    editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("Quantity"))
                End If
                If Me.RadGridView1.CurrentColumn.Name = "DevId" Then
                    editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("DevId"))
                    editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("DevName"))
                End If
                editor.AutoSizeDropDownToBestFit = True
            End If
      
        End Sub
      
    End Class
      
    Public Class Order
        Public Sub New(ByVal orderId As Integer, ByVal orderQty As Integer)
            Me.OrderId = orderId
            Me.Quantity = orderQty
        End Sub
      
        Public Property OrderId As Integer
        Public Property Quantity As Integer
    End Class
      
    Public Class DevEnv
        Public Sub New(ByVal devId As Integer, ByVal devName As String)
            Me.DevId = devId
            Me.DevName = devName
        End Sub
      
        Public Property DevId As Integer
        Public Property DevName As String
    End Class
      
    Public Class Person
        Public Sub New(ByVal Name As String, ByVal orderId As Integer, ByVal devId As Integer)
            Me.Name = Name
            Me.OrderId = orderId
            Me.DevId = devId
        End Sub
      
        Public Property OrderId As Integer
        Public Property DevId As Integer
        Public Property Name As String
    End Class

    designer
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class Form1
        Inherits System.Windows.Forms.Form
      
        'Form overrides dispose to clean up the component list.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
      
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.IContainer
      
        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.  
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            Me.RadGridView1 = New Telerik.WinControls.UI.RadGridView()
            CType(Me.RadGridView1, System.ComponentModel.ISupportInitialize).BeginInit()
            Me.SuspendLayout()
            '
            'RadGridView1
            '
            Me.RadGridView1.Dock = System.Windows.Forms.DockStyle.Fill
            Me.RadGridView1.Location = New System.Drawing.Point(0, 0)
            Me.RadGridView1.Name = "RadGridView1"
            Me.RadGridView1.Size = New System.Drawing.Size(383, 327)
            Me.RadGridView1.TabIndex = 0
            Me.RadGridView1.Text = "RadGridView1"
            '
            'Form1
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.ClientSize = New System.Drawing.Size(383, 327)
            Me.Controls.Add(Me.RadGridView1)
            Me.Name = "Form1"
            Me.Text = "Form1"
            CType(Me.RadGridView1, System.ComponentModel.ISupportInitialize).EndInit()
            Me.ResumeLayout(False)
      
        End Sub
        Friend WithEvents RadGridView1 As Telerik.WinControls.UI.RadGridView
      
    End Class

    If you think I can be of further help, please just let me know
    Thanks
    Richard
  9. Ferry Engels
    Ferry Engels avatar
    3 posts
    Member since:
    Feb 2010

    Posted 16 Feb 2011 Link to this post

    Yes Richard, thank you.
    I changed my code because your one is shorter.
    Best Regards

    Ferry
  10. Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 16 Feb 2011 Link to this post

    Glad that helped
    All the best
    Richard
  11. Ernez
    Ernez avatar
    1 posts
    Member since:
    Apr 2014

    Posted 01 Apr 2014 Link to this post

    hi,

    how can i use this FilterDescriptor with two GridViewMultiComboBoxColumn

    i tried using this code but it fails when i click the second gridviewmulticomboboxcolumn the filter aren't  working

    Private Sub radGridView1_CellBeginEdit(ByVal sender As Object, ByVal e As GridViewCellCancelEventArgs) ' Handles RadGridView1.CellBeginEdit
            If TypeOf Me.RadGridView1.CurrentColumn Is GridViewMultiComboBoxColumn Then

                If RadGridView1.Columns.Item(Me.RadGridView1.CurrentColumn.Index).Name = "column1" Then
                    If (Not codeColumnAdded) Then
                        codeColumnAdded = True
                        Dim editor1 As RadMultiColumnComboBoxElement = CType(Me.RadGridView1.ActiveEditor, RadMultiColumnComboBoxElement)
                        editor1.EditorControl.Columns.Clear()
                        'If editor1.Rows.Count = 0 Then
                        'editor.EditorControl.MasterTemplate.AutoGenerateColumns = False
                        'editor.DataSource = DT_CHARTS
                        'editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("Code"))
                        'editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("Description"))
                        'editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("Type"))

                        editor1.AutoFilter = True
                        editor1.DisplayMember = "Description"

                        Dim filter As New FilterDescriptor()
                        filter.PropertyName = editor1.DisplayMember
                        filter.Operator = FilterOperator.Contains
                        editor1.EditorControl.MasterTemplate.FilterDescriptors.Add(filter)
                        editor1.DropDownSizingMode = SizingMode.UpDownAndRightBottom
                        editor1.AutoSizeDropDownToBestFit = True
                        'End If
                    End If

                ElseIf RadGridView1.Columns.Item(Me.RadGridView1.CurrentColumn.Index).Name = "column2" Then
                    If (Not accColumnAdded) Then
                        accColumnAdded = True
                        Dim editor As RadMultiColumnComboBoxElement = CType(Me.RadGridView1.ActiveEditor, RadMultiColumnComboBoxElement)
                        editor.EditorControl.Columns.Clear()
                        'If editor.Rows.Count = 0 Then
                        'editor.EditorControl.MasterTemplate.AutoGenerateColumns = False
                        'editor.DataSource = DT_ACCOUNTS
                        'editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("AccountNo"))
                        'editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("AccName"))
                        'editor.EditorControl.Columns.Add(New GridViewTextBoxColumn("Branch"))
                        editor.AutoFilter = True
                        editor.DisplayMember = "AccName"

                        Dim filter As New FilterDescriptor()
                        filter.PropertyName = editor.DisplayMember
                        filter.Operator = FilterOperator.Contains
                        editor.EditorControl.MasterTemplate.FilterDescriptors.Add(filter)
                        editor.DropDownSizingMode = SizingMode.UpDownAndRightBottom
                        editor.AutoSizeDropDownToBestFit = True
                        'End If
                    End If
                End If
            End If

        End Sub
  12. Dimitar
    Admin
    Dimitar avatar
    1415 posts

    Posted 03 Apr 2014 Link to this post

    Hello Ernez,

    Thank you for contacting us.

    This solution is valid for the version it was created for (2010.3 10.1215). Currently, if you want to achieve similar behaviour you need to use the CellEditorInitialized event which is fired after the CellBeginEdit. For example you can set the datasource and add filter to the underlying grid with the following code:
    Private Sub radGridView1_CellEditorInitialized(sender As Object, e As GridViewCellEventArgs)
        If TypeOf Me.radGridView1.CurrentColumn Is GridViewMultiComboBoxColumn Then
            If radGridView1.Columns(Me.radGridView1.CurrentColumn.Index).Name = "column1" Then
                Dim editor1 As RadMultiColumnComboBoxElement = DirectCast(Me.radGridView1.ActiveEditor, RadMultiColumnComboBoxElement)
     
                editor1.DataSource = GetTable()
     
                editor1.EditorControl.EnableFiltering = True
     
                editor1.DisplayMember = "Name"
     
                Dim filter As New FilterDescriptor()
                filter.PropertyName = editor1.DisplayMember
                filter.[Operator] = FilterOperator.Contains
                filter.Value = "in"
     
                editor1.EditorControl.FilterDescriptors.Add(filter)
                editor1.DropDownSizingMode = SizingMode.UpDownAndRightBottom
                editor1.AutoSizeDropDownToBestFit = True
            End If
        End If
    End Sub

    Let me know if you have additional questions.
     
    Regards,
    Dimitar
    Telerik
     

    Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

     
Back to Top
UI for WinForms is Visual Studio 2017 Ready