A vueltas con .NET: ComboBox Multi-Columna

Aunque parezca mentira Visual Basic 2008 no incorpora por defecto un ComboBox capaz de mostrar varias columnas de datos. La única manera de hacerlo es programarlo nosotros mismos o buscar ese control por Internet.

Como ya os imaginais a estas alturas, no vamos a inventar nada que ya esté inventado y funcione perfectamente. Por tanto, vamos a añadir el control capaz de hacer lo que queremos y explicar cómo utilizarlo para mostrar los datos que nos interese. En nuestro caso vamos a utilizar el control Icon ComboBox, creado por Steve McMahon, de la conocida página vbaccelerator

iconcombobox

¿Cómo añadir el control a nuestro proyecto?

Lo primero será descargar el control.

Una vez descargado tenemos que añadir el control al toolbox de nuestro proyecto. Clickando con el botón derecho del ratón encima del toolbox marcamos “Choose Items“, dentro del nuevo menú le damos a Browse y seleccionamos el archivo .dll del control.

Llegados a éste punto tenemos el nuevo control añadido al toolbox y listo para usarse. Lo siguiente será añadir el control al formulario, declararlo, modificar los aspectos visuales y empezar a pasarle valores. Vamos a ello.

Añadir el control al formulario se hace igual que cualquier otro control de los que vienen por defecte en Visual Studio, por tanto arrastramos el control al formulario y empezamos a trabajar con él.

Declaramos el control. Como veis se trata de definir cuántas columnas va a tener el control y el espacio que van a ocupar:


Dim column As IconComboBoxColumn = New IconComboBoxColumn

'Por defecto el control ya trae una columna, sólo cambiamos su tamaño
IconComboDepartamento.Columns(0).ColumnWidth = 128

'Segunda columna
column.ColumnWidth = 32
IconComboDepartamento.Columns.Add(column)

'Tercera columna

column = New IconComboBoxColumn
column.ColumnWidth = 96
IconComboDepartamento.Columns.Add(column)

Ya tenemos el control declarado, ahora solo falta poblarlo y mostrarlo. El método para poblar el control consiste en añadirle Items, cada item es una linea del combobox y a cada item le añadiremos tantos subitems como columnas tengamos en el control. Con el ejemplo queda más claro.


Dim ici As IconComboItem = New IconComboItem
ici.Text = "Informática"

Dim subitem As IconComboSubItem = New IconComboSubItem
subitem.Text = "5 trabajadores"
ici.SubItems.Add(subitem)

subitem = New IconComboSubItem
subitem.Text = "Piso superior"
ici.SubItems.Add(subitem)

IconComboDepartamento.Items.Add(ici)

De éste manera hemos añadido una linea al combobox de 3 columnas.

10 Comments

  • Información Bitacoras.com…

    Valora en Bitacoras.com: Aunque parezca mentira Visual Basic 2008 no incorpora por defecto un ComboBox capaz de mostrar varias columnas de datos. La única manera de hacerlo es programarlo nosotros mismos o buscar ese control por Internet. Como ya os ….

  • No me agrega columnas a mi combo, hice exactamente lo que aparece ahí, inclusive intente ccambiarlo de las propiedades del control y tampoco me deja. Agredeceré su pronta respuesta.
    Muchas gracias

  • Falta agregar el item ici al Combo

    IconComboDepartamento.items.Add(ici)

  • Al dar click sobre el combo como puedo tomar la informacion de la segunda columna para colocarla en una caja de texto?

  • ya cai en cuenta,

    “.SelectedItem.SubItems(0).Text” me entrega la información de la segunda columna.
    ;)

  • Hola, he seguido los pasos de esta guía, mi código parece no tener errores, sin embargo, no me agrega los datos al combo. Utilizo Visual Studio 2010 VB, alguien podria ayudarme???

    Gracias

  • Para dar una idea de mi problema, este es mi código
    Private Sub registros_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    MsgBox(“Iniciando”)
    Dim column As vbAccelerator.Components.Controls.IconComboBoxColumn = New vbAccelerator.Components.Controls.IconComboBoxColumn

    ‘Por defecto el control ya trae una columna, sólo cambiamos su tamaño
    IconComboBox1.Columns(0).ColumnWidth = 128

    ‘Segunda columna
    column.ColumnWidth = 32
    IconComboBox1.Columns.Add(column)

    ‘Tercera columna

    column = New vbAccelerator.Components.Controls.IconComboBoxColumn
    column.ColumnWidth = 96
    IconComboBox1.Columns.Add(column)

    Dim ici As vbAccelerator.Components.Controls.IconComboItem = New vbAccelerator.Components.Controls.IconComboItem
    ici.Text = “Informática”

    Dim subitem As vbAccelerator.Components.Controls.IconComboSubItem = New vbAccelerator.Components.Controls.IconComboSubItem
    subitem.Text = “5 trabajadores”
    ici.SubItems.Add(subitem)

    subitem = New vbAccelerator.Components.Controls.IconComboSubItem
    subitem.Text = “Piso superior”
    ici.SubItems.Add(subitem)

    IconComboBox1.Items.Add(ici)
    End Sub

  • A mi me pasa lo mismo, si solamente agrego un solo item, estoy en vb.net 2005.

    Y tuve que agregar la referencia y hacer el.

    Imports vbAccelerator.Components.Controls

  • PONGAN ASUNTO: para ver si no existe lo hacemos. Estoy buscando un combobox de multiples columnas… pero que al su vez al dar en el combo se desplieguen las multiples columnas pero que en la cabecera de cada una de estas multiples columnas me de la opcion de dijitar texto y solo aparezcan las coincidencias… mas o menos como en el FARPOINT SPREAD pero el grid solo se ve si desplego el combo. caso contrario se ve como un combo comun y sivestre

  • hola a todos al selecionar una fila por ejemplo de 5 columnas,,,,coomo hago para ke los datos de las 5 columnas me pasen a texbox.-.-ya le buske y nada si alguien sabe..digamelo plis,…

Leave a comment