Autor Tema: ComboBox en un DataGridView  (Leído 24002 veces)

0 Usuarios y 1 Visitante están viendo este tema.

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
ComboBox en un DataGridView
« en: Septiembre 27, 2012, 10:16:09 pm »
Saludos a todos !!! ;D

A ver si puedo plantear bien lo que necesito hacer...

Supongamos que se tiene un DataGridView y el mismo se carga desde una Tabla 'N' con los siguientes campos:

Modelo          Marca          Tipo          Año
-----------------------------------------------------
AAAA             XXXX            1111        2010
CCCC            FFFF             5555        2005

Ahora, la celda correspondiente al campo 'Modelo', al hacer click en ella, sea o se convierta en un ComboBox, y despliegue otros registros relacionados, por ejemplo los colores disponibles del modelo.

Como crearìa ese tipo de celda?  y de paso, como haría la consulta para cargar dicha celda?

Quizás parezca fácil, pero resulta que no encontré el camino  :-[ :-[ :'(

Agradecido para quien tenga la solución.


Manuel F. Borrego S. 8)
Venezuela.


PD: Trabajo con VB 2008.
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

seba123neo

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:ComboBox en un DataGridView
« Respuesta #1 en: Septiembre 28, 2012, 09:47:19 am »
si se puede, con el objeto DataGridViewComboBoxColumn, es un objeto que seria como un combobox, lo trabajas igual, tenes que crearlo, cargarle los datos que quieras y finalmente lo agregas como columna al datagridview.

por tirar un ejemplo:

Código: (vbnet) [Seleccionar]
        Dim cmb As New DataGridViewComboBoxColumn()
        cmb.Name = "MiCombo"
        cmb.Items.Add("Item 1")
        cmb.Items.Add("Item 2")
        DataGridView1.Columns.Add(cmb)

saludos.

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:ComboBox en un DataGridView
« Respuesta #2 en: Septiembre 29, 2012, 01:30:06 am »
Excelente Seba !!! :o

Ya lo voy a probar...!!! Gracias !!!

Saludos !!!
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:ComboBox en un DataGridView
« Respuesta #3 en: Septiembre 30, 2012, 06:01:41 am »
El ejemplo funciona muy bien, ahora, como había dicho anteriormente, ¿cómo puedo hacer para que dicho ComboBox se cargue desde una Tabla de una BD?

He probado de algunas formas, y no doy con la solución (he intentado con el DataSet y con el DataTable, pero me tira errores, donde me dice que el campo no existe !!!)

Aún no hallo la solución !!!

Saludos.
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

NolO

  • Kilobyte
  • **
  • Mensajes: 73
  • Reputación: +6/-0
    • Ver Perfil
Re:ComboBox en un DataGridView
« Respuesta #4 en: Octubre 02, 2012, 07:29:30 pm »
Hola ADONAIRAFA

Aquí te dejo un par de hilos.

Opciòn uno la explicación la realiza con C# pero al final esta el archivo en vb.

Opciòn dos la explicación esta hecha en vb.

Espero sea lo que necesitas.

Salu2.

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:ComboBox en un DataGridView
« Respuesta #5 en: Octubre 02, 2012, 08:01:01 pm »
Gracias NoIO !!! Lo voy a ver. en cuanto a que esté hecho en VC# no hay problema, puedo usarlo como esté, o puedo hacer la "traducción" a VB 2008.

De todas formas buscando logré una especie de "híbrido" entre unas 3 (más o menos) soluciones posibles, entre ellas la que me mostró de seba123neo.

En breve lo publico...

Saludos !!! 8)
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

seba123neo

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:ComboBox en un DataGridView
« Respuesta #6 en: Octubre 03, 2012, 09:50:42 am »
es como llenar cualquier combo, simplemente haces un select a la base de datos y llenas el combo con Items.Add..asi de simple.

saludos.

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Isistiendo con el ComboBox en un DataGridView
« Respuesta #7 en: Octubre 07, 2012, 08:48:29 pm »
Bueno, sigo insistiendo con el "temita" del DataGridView conteniendo una columna de tipo ComboBox.

Lo logré mediante el uso del objeto DataGridViewComboBoxColumn, con la ayuda de de seba123neo...

Tomé como base (o idea, nada de plagios, todo el crédito es tuyo sebas !!!), una parte del ABM publicado por el mismo (seba123neo), y lo que quería lograr era presentar un DGV que mostrara 4 columnas:

PAISES                    CAPITALES                  EDO / PROVINCIAS                  CIUDADES

http://imageshack.us/photo/my-images/35/nro1.png/

Las Columnas correspondientes a "EDO / PROVINCIAS" y "CIUDADES", son creadas y añadidas con el DataGridViewComboBoxColumn (las otras normales por supuesto  ::)).

Al hacer click sobre cualquiera de las celdas correspondientes a la columna "PAISES", de inmediato se cargará la celda correspondiente en la columna "EDO / PROVINCIAS"...

http://imageshack.us/photo/my-images/202/nro2.png/

A continuación se hace click en esa celda (de la columna "EDO / PROVINCIAS"), y se despliega el combobox mostrando los Estados o Provincias del País seleccionado....

http://imageshack.us/photo/my-images/203/nro3.png/

Hasta ahí no ha problema. Pero cuando hago click sobre el Estado o Provincia a seleccionar: 1) no pasa nada, entonces tengo que oprimir "Enter", ahí si actúa el código correspondiente, pero me arroja el siguiente error, y allí si que no he encontrado salida !!! :-[

http://imageshack.us/a/img38/2996/nro4.png

He aquí el codigo que utilizo (gran parte tomado de "El Guille"):


Con este, cargo el DGVComboBoxColumn:

Código: (VB) [Seleccionar]
Private Sub dgvInfoStates_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvInfoStates.CellClick
                Dim cdx As Integer = e.ColumnIndex
                Dim rdx As Integer = e.RowIndex
                '//
                If cdx = 0 Then
                        flag = True
                Else
                        flag = False
                End If
                '//
                If Not flag Then Exit Sub
                '//
                Dim sCountry As String = dgvInfoStates.CurrentCell.Value.ToString
                Dim sqlCnt As String = "SELECT ID_Country, Country FROM Countries " & _
                                        "WHERE Country = '" & sCountry & "'"
                Dim schIdc As New cssSearch
                Dim idC As Integer = schIdc.SearchIdCSC(sqlCnt, 0)
                Dim dgvCbxCell As New DataGridViewComboBoxCell
                Dim sqlSte As String = "SELECT * FROM States WHERE ID_Country = " & idC
                Dim Dst As New DataSet()
                Dim Dad As New FbDataAdapter(sqlSte, FbConn)
                '//
                Dad.Fill(Dst, "States")
                With dgvCbxCell
                        .DataSource = Dst.Tables(0).DefaultView
                        .DisplayMember = "State"
                        .ValueMember = "ID_State"
                End With
                '//
                dgvInfoStates.Item("EDOS. / PROVINCIAS", dgvInfoStates.CurrentCell.RowIndex) = dgvCbxCell
                schIdc = Nothing
                dgvCbxCell = Nothing
                Dst = Nothing
                Dad = Nothing
                '// Dim sStates As String = dgvInfoStates.Item(cdx, rdx).Value.ToString
                '// Dim sState As String = dgvInfoStates.CurrentCell.Value.ToString
        End Sub


Con este configuro el DGVComboBoxColumn:

Código: (VB) [Seleccionar]
Private Sub GridStyles()
                '// Aqui se dan los estilos al Grid...
                '// -----------------------------------------------------------------------------------------------------------------
                Dim dgvStyle As DataGridViewCellStyle = dgvInfoStates.ColumnHeadersDefaultCellStyle
                '//
                With dgvStyle
                        .Font = New Font("Tahoma", 10, FontStyle.Bold)
                        .BackColor = Color.Blue
                        .ForeColor = Color.Azure
                End With
                '// Se oculta la primera primera columna...
                dgvInfoStates.RowHeadersVisible = False
                '//
                Dim sql As String = "SELECT Country AS PAISES, Capital AS Capitales FROM Countries"
                Dim Dad As New FbDataAdapter(sql, FbConn)
                Dim Dst As New DataSet
                '//
                Dad.Fill(Dst, "Country")
                Dad.Fill(Dst, "Capital")
                dgvInfoStates.DataSource = Dst.Tables(0).DefaultView
                '//
                '// Esta son dos columnas de ComboBoxes...
                Dim cbxColStates As New DataGridViewComboBoxColumn
                Dim cbxColCities As New DataGridViewComboBoxColumn
                '//
                cbxColStates.Name = "EDOS. / PROVINCIAS"
                cbxColStates.FlatStyle = FlatStyle.Flat
                dgvInfoStates.Columns.Add(cbxColStates)
                cbxColCities.Name = "CIUDADES"
                cbxColCities.FlatStyle = FlatStyle.Flat
                dgvInfoStates.Columns.Add(cbxColCities)
                '//
                '// Configurando las Columnas...
                With dgvInfoStates
                        .Refresh()
                        .Font = New Font("Arial", 11, FontStyle.Regular)
                        If .ColumnCount >= 0 Then
                                .Columns(0).Width = 200
                                .Columns(1).Width = 180
                                .Columns(2).Width = 210
                                .Columns(3).Width = 230
                        End If
                End With
                '//
                dgvInfoStates.ClearSelection()
        End Sub


Aquí es donde se origina el problema (el cual no soy capaz de entender) :'(

Código: (VB) [Seleccionar]
Private Sub dgvInfoStates_CellValueChanged(ByVal sender As Object, ByVal e As  System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvInfoStates.CellValueChanged
                Dim cdx As Integer = e.ColumnIndex
                Dim rdx As Integer = e.RowIndex
                Dim sCountry As String = dgvInfoStates.Item(0, rdx).Value.ToString
                Dim schCnt As New cssSearch
                Dim sqlCnt As String = "SELECT ID_Country, Country FROM Countries " & _
                                        "WHERE Country = '" & sCountry & "'"
                Dim idC As Integer = schCnt.SearchIdCSC(sqlCnt, 0)
                Dim dgvCbcCell As New DataGridViewComboBoxCell
                Dim Dst As New DataSet()

                If cdx = 2 Then
                        Dim sState As String = dgvInfoStates.Item("CIUDADES", rdx).Value.ToString
                        '// Dim sqlSte As String = "SELECT * FROM States"
                End If
                '...
                '...
                '...
                '...
        End Sub

Con esta línea Dim sState As String = dgvInfoStates.Item("CIUDADES", rdx).Value.ToString estoy tratando de obtener el valor de la celda seleccionada en la columna "EDO / PROVINCIAS", pero simpre me tira la misma mierd...!!! >:(

Si alguien con infinita paciencia puede "guíarme a la luz" de la solución, le estaré muy agradecido !!!


Saludos a todos los que lean el Post !!! ;D


Manuel F. Borrego S. 8)
« última modificación: Octubre 07, 2012, 08:50:07 pm por ADONAIRAFA »
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!