Como convertir una celda de un datagridview en un combobox

net es una aplicación winform,

Yo cargo los datos de en mi datagridview mediante una consulta,

Y hay una columna ("locales") que no se carga nada, al hacer una consulta,

Pero en el caso de que el usuario quiera editar esa columna, o mejor dicho esa celda quiero que se convierta en un combobox con los datos de mis locales, y así el usuario pueda seleccionar el local, al perder el foco, dicha celda vuelva a convertirse en un textbox claro que con el dato seleccionado.

Seria dinámico solo se converteria en un combobox cuando se entra en alguna celda de dicha columna, y el combobox estaría cargado con datos de una consulta, al seleccionar un dato vuelva a ser un textbox. No se si me explico.

Aquí tengo un código pero me bota error al cargar

Public Sub LLENAR_LOCALES(DATAGRIDVIEW As DataGridView, FECHA As String, Optional ByVal index As Integer = -1)
 Try
For Each ds As DataGridViewRow In DATAGRIDVIEW.Rows
 If DATAGRIDVIEW.DataSource Is Nothing Or DATAGRIDVIEW.Rows.Count = 0 Or index = -1 Then Exit Sub
 With DATAGRIDVIEW.Rows(index)
 Dim Id As String
 Dim celda As DataGridViewComboBoxCell = TryCast(.Cells("LOCALES"), DataGridViewComboBoxCell)
 Id = .Cells("ID").Value
 Dim cmd As New SqlCommand("USP_COMP01_LISTAR_LOCALES_xFechayID", cn)
 cmd.CommandType = CommandType.StoredProcedure
 cmd.Parameters.AddWithValue("@FECHA", FECHA)
 cmd.Parameters.AddWithValue("@SKU_COD", Id)
 Dim da As New SqlDataAdapter(cmd)
 Dim tbl As New DataTable()
 da.Fill(tbl)
celda.DataSource = tbl
 celda.ValueMember = "LOCAL"
 celda.DisplayMember = "LOCAL"
 .Cells.Add(celda)
 .Cells("Locales").Value = tbl.Rows(0).Item(0).ToString
 'Next
 End With
 Catch ex As Exception
 MsgBox(ex.Message)
 End Try

1 Respuesta

Respuesta

Esto es tu valor inicial de tu Grid, y tu realizas esta parte y en la segunda fila no aparecen los valores de tu combobox,

Especificar la columna:
DataGridViewComboBoxColumn

Obtienes las filas totales del Grid
dataGridView1Productos.Rows.Count;
NumFilas - 1;<- Como empieza con la posicion en 1 le restas 1.

Generas tu consulta SQL

DataGridViewComboBoxCell datosComboDT1 = dataGridView1Productos.Rows[x].Cells[0] as DataGridViewComboBoxCell; <- FILA Y CELDA DE TU COLUMNA DataGridViewComboBoxColumn

datosComboDT1.DataSource = dtDosDescripcionProducto;
datosComboDT1.DisplayMember = TextoEjemplo;
datosComboDT1.ValueMember = ValorTextoEjemplo:

private void dataGridView1Productos_UserAddedRow(object sender, DataGridViewRowEventArgs e)
En esta parte repites o incluyes el porcedimiento anterior, y listo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas