No se muestra el valor de Datagridcombobox

Tengo un DataGridView (llamado DataGridViewSecurity) en VB.net (Visual Studio 2010) que está vinculado a un DataTable (llamado DataTableSecurity) en un DataSet (llamado DataSetSecurity). Agregué una columna no vinculada (llamada nSecurityComboBox) que configuré en función de un campo entero (llamado nSecLevel) en el DataTable. Después de configurar el cuadro combinado, no muestra nada en el cuadro combinado, pero cuando selecciona el cuadro combinado, se muestran los 5 valores en su colección de elementos.

Aquí está el código que estoy usando para agregar un registro a la DataTable y luego para configurar el cuadro combinado:

Sub Foo()
.
.
.
    DataSetSecurity.Tables(0).Rows.Add(New Object() {sName, sID, sSec})
    ComboCell_Select(nRow, 3, DataGridViewSecurity, sSecRecs.nSecLevel)
    MessageBox.Show("Value for the combo set at " + DataGridViewSecurity.Rows(nRow).Cells(3).Value.ToString)
.
.
.
End Sub

Private Sub ComboCell_Select(ByVal dgvRow As Integer, _
                             ByVal dgvCol As Integer, _
                             ByRef DGV As DataGridView,
                             ByRef nComboBoxRow As Int16)

    Try
        Dim CBox As DataGridViewComboBoxCell = CType(DGV.Rows(dgvRow).Cells(dgvCol), DataGridViewComboBoxCell)
        Dim CCol As DataGridViewComboBoxColumn = CType(DGV.Columns(dgvCol), DataGridViewComboBoxColumn)

        CBox.Value = CCol.Items(nComboBoxRow)
        DGV.UpdateCellValue(dgvCol, dgvRow)

        'MessageBox.Show("New value in the combo box = " + CBox.Value.ToString)
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

El messagebox.show en Foo muestra el valor correcto para el cuadro combinado, pero no se muestra nada. ¿Alguien ve lo que estoy haciendo mal?

Gracias.

-NCGrimbo

preguntado el 01 de febrero de 12 a las 22:02

2 Respuestas

Al final, encontré un código C # que convertí a VB.net para solucionar el problema. Aquí está el código:

Private Sub DataGridViewSecurity_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridViewSecurity.EditingControlShowing
    Dim cellComboBox As ComboBox = TryCast(e.Control, ComboBox)
    If cellComboBox IsNot Nothing Then
        ' make sure the handler doen't get registered twice
        RemoveHandler cellComboBox.SelectionChangeCommitted, AddressOf Me.CellComboBoxOnSelectionChangeCommitted
        AddHandler cellComboBox.SelectionChangeCommitted, AddressOf Me.CellComboBoxOnSelectionChangeCommitted
    End If
End Sub

Private Sub CellComboBoxOnSelectionChangeCommitted(ByVal sender As Object, ByVal e As EventArgs)
    Dim comboBox As DataGridViewComboBoxEditingControl = TryCast(sender, DataGridViewComboBoxEditingControl)
    If sender Is Nothing Then
        Return
    End If
    If comboBox.SelectedItem Is Nothing Then
        Return
    End If
    If Me.DataGridViewSecurity.CurrentCell.Value = comboBox.SelectedItem Then
        Return
    End If

    Me.DataGridViewSecurity.CurrentCell.Value = comboBox.SelectedItem

End Sub

Respondido 11 Feb 12, 00:02

Gracias, pero necesita cambiar su línea de código a esto: If CustDG.CurrentCell.Value Is comboBox.SelectedItem Then Return End If - evry1falls

Si entiendo bien la pregunta, ¿todos los valores están en el cuadro combinado pero no se seleccionan correctamente de forma predeterminada? Creo que tuve este problema hace unos días, esto es lo que tengo ahora.

'Create the combobox column
Dim comboBox As New DataGridViewComboBoxColumn()

'Add some stuff to the combobox
comboBox.Items.Add("FirstItem")
comboBox.Items.Add("SecondItem")

'Select the first item
comboBox.DefaultCellStyle.NullValue = comboBox.Items(0) 

'Now add the whole combobox to the DataGridView
dgvItems.Columns.Add(comboBox)

¡Espero que esto ayude!

Respondido 03 Feb 12, 18:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.