Como hacer DataGridComboBoxColumn en Datagridview

 
Hola a tod@s,
 
Aprovechando la jornada de verano en el curro, un ratito por las tardes lo dedico a programar una aplicación con mi novio. Ayer, intentando adaptar el código de una aplicación hecha con VS2003 (bajada del Codeproject), tuve algunos problemillas dado que usaba los DataGridColumnStyle de los DataGrid, pero yo quería usar el DataGridView para mi aplicación. Echando un vistazo en Google, me encontre con respuestas muy graciosas, como por ejemplo, "ya que VS2005 sigue soportando los datagrid, ¿por qué no lo sigues haciendo con los datagrid?". Esa clase de respuestas no me gustan, y eso me llevó a dedicarle un tiempo para saber como se hace, y lo conseguí y por eso quiero enseñaroslo para los que todavía no lo sepáis y  por supuesto en castellano. El ejemplo está hecho en C#, pero si alguien lo necesita en VB que lo diga y lo pongo también en ese lenguaje.
 
En el Framework 1.4 para dar un formato de combo a una columna de un grid se tenían que seguir los siguientes pasos:
 
1. Primero se define un DataGridTableStyle.
 
    DataGridTableStyle estiloGrid= new DataGridTableStyle();
   estiloGrid.MappingName = "Nombre" ;
 
2. Luego se definen las DataGridColumnStyle
 
   //Hay que tener en cuenta que NombreDataTable es un DataTable
   //definido previamente donde se encuentran los datos que se
   //mostrarán en el combo, y DataGridUsado es el DataGrid del
   //formulario donde queremos mostrar el combo, y NombreColumna es el
   //nombre de la columna de la fuente de datos con la que bindaremos el grid
    DataGridColumnStyle ColumnaCombo= new DataGridComboBoxColumn("NombreCol", NombreDataTable, "NombreMostrado", "NombreColumna", DataGridUsado);
   ColumnaCombo.Width=150;
   ColumnaCombo.NullText = string.Empty;
   estiloGrid.GridColumnStyles.Add(ColumnaCombo);
 
3. Asociar el estilo al datagrid
 
   DataGridUsado.TableStyles.Add(estiloGrid);
 
4. Asociamos el grid a una fuente de datos.
 
    DataGridUsado.DataSource = loquesea;
 
Para obtener el mismo resultado con el Framework 2.0 hay que hacer lo siguiente:
 
1. Creamos una DataGridViewComboBoxColumn.
 
   DataGridViewComboBoxColumn ColumnaCombo= new DataGridViewComboBoxColumn();
   ColumnaCombo.HeaderText =
"NombreColumna";
   ColumnaCombo.DataPropertyName = "NombreColumna";
 
2. Le añadimos los items que vamos a mostrar en el combo
 
   ColumnaCombo.Items.AddRange(NombreArray); //NombreArray puede ser una coleccion de lo que sea
3. Añadimos dicha columna al DataGridView que nos interesa
 
   dataGridView1.Columns.Add(ColumnaCombo);
 
4. Asociamos el grid una fuente de datos
 
   dataGridView1.DataSource = loquesea;
 
Como podéis observar es bastante sencillito, y espero que os ayude.
 
Saludos.

6 Responses to Como hacer DataGridComboBoxColumn en Datagridview

  1. Hack dice:

    hola, llevo tiempo buscando por internet algo que hable sobre como capturar los eventos que se generan en los datagridcomboboxcolumn y no hay manera. El asunto es que tengo un datagridview, una de sus columnas es de tipo combobox y quiero que al elegir elelemento de dicho comboboxcolumn se me carguen los datos de las demás.
    ¿ me podrías orientar donde conseguir la información para hacer esto ?
    Muchísimas gracias de antemano.

  2. Carmen dice:

    Hola,
     
    Prueba a usar algo parecido a esto:
     
    y.CellValueChanged+=new DataGridViewCellEventHandler(y_CellValueChanged);  // en C#
    AddHandler y.CellValueChanged, AddressOf y_CellValueChanged                          \’ en VB
     
    donde y es un datagridview y y_CellValueChanged será el delegado que maneje el evento de CellValueChanged, ahí tendrás que hacer una comprobación de si la celda que ha cambiado corresponde a la que quieres manejar y luego seguir con lo que quieras hacer.
     
    Un saludo

  3. veronica dice:

    Hola espero me puedan ayudar…
    tengo un datagridview con 4 columnas enlazadas a datos y una que es un combobox que no esta enlazada a datos, necesito capturar la eleccion que haga el usuario en el combobox y compararla con un dato de la base de datos…
    como hago esto?????
    muchas gracias

  4. Jose L. A. dice:

    Hola carmen ante todo muy bueno lo que te tomas el tiempo de publicar, mi consulta es la siguiente yo estoy con un proyecto de vb 2008 la cosa es ke hago reportes estaticos es decir que no se modifican en tiempo de ejecucion sino que muestran siempre lo mismo con crystal y con los reportes de microsoft y todo de 1000 hasta aqui. La cosa es que necesito hacer reportes que muestren campos segun valores que pone el usuario por ejemplo mostrarme la factura 1003 por dar un ejemplo y que el reporte me muestre la factura numero 1003, o por dar otro ejemplo necesito que me muestre el stock para todos los productos en una categoria específica, podrías indicarme como tengo ke hacer (en lo posible con el reporte de microsoft) sino  no hay drama lo hago con crystal pero estoy medio perdido en esa parte te agradeceré si puedes indicarme como hacerlo o mandarme algunos ejemplos o algo que me ayude a entender como funciona. Saludos y desde ya muchas gracias

  5. Mauri dice:

    hola como estas, tengo un dilema con una consulta en c# 2008 ya que tengo varios campos en una bd access 2003 y solo quiero mostrar los datos que corresponden a una cierta especificacion p/ej: int edad,dias;if(edad==48){ printf("Nombre: ",nom); printf("DNI: ",dni);}else { if(edad==148) { printf("Nombre: ",nom); printf("DNI: ",dni); }es eso mas o menos lo que quiero hacer y no puedo.me podrían dar una ayuda porfavorLo que quiero es mostrar ciertos datos que cumplen con una restriccion en un datagridview extraidos de una bd access.-Desde ya muchas gracias

  6. Marcos dice:

    Buenas noches, Buenisimo tu ejemplo me soluciono la vida. Ahora que veo que sabes bastante me voy a aprovechar con algunas consultas. Quiero hacer que cuando elija una opcion del combo que esta dentro de la grilla me agregue las columnas siguientes que van a depender de la eleccion del combo, como puedo capturar el item seleccionado en el combo (que esta dentro de la grilla obviamente) Espero tu respuesta, saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: