none
Uso de e.cancel en evento DataGridView.CellValidating RRS feed

  • Pregunta

  • Buenas tardes a todos.

    Se que esta pregunta ya se ha de haber hecho muchas veces pero no se como buscarla.

    mi problema es que al intentar validar una celda de un DataGridView el programa no detecta ningun valor en la celda por que supongo que aun no se ha terminado de escribir o algo similar

    este es mi codigo.

        Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
            If IsNumeric(DataGridView1.Item(0, DataGridView1.CurrentRow.Index).Value) Then
                e.cancel = False
            Else
                e.Cancel = True
            End If
        End Sub

    martes, 12 de marzo de 2019 19:49

Respuestas

  • pero es que solo quiero validar la primera columna nada mas, pero cuando empiezo a escribir y despues me cambio de celda y cuando entra el codigo me detecta que aun esta vacio, aun que los datos de la columna y la fila esten correctos y si uso el e.FormattedValue me validara todas las celdas de todas las columnas

    solo agregue (0, e.RowIndex).FormattedValue pero sigue saliendo el problema

    Edit:

    ya pude solucionarlo solo agregue una condición antes.

        Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
            If  e.ColumnIndex = 0 Then
                If IsNumeric(e.FormattedValue) Then
                    e.cancel = False
                Else
                    e.Cancel = True
                End If
            End If
        End Sub

    • Editado RHCRD miércoles, 13 de marzo de 2019 16:22 agregue solucion
    • Marcado como respuesta RHCRD miércoles, 13 de marzo de 2019 16:22
    miércoles, 13 de marzo de 2019 15:55

Todas las respuestas

  • aun no logro encontrar la solucion
    miércoles, 13 de marzo de 2019 0:03
  • Hola:

    Para todas las celdas, estás comprobando el DataGridView1.Item(0, <row>), es decir, SIEMPRE compruebas la primera columna de la fila, sea la celda que sea. Además usas también DataGridView1.CurrentRow, cuando deberías usar la información recibida en el parámetro e. 

    El valor a comprobar en CellValidating es:

    DataGridView1.Item(e.ColumnIndex, e.RowIndex).Value

    También tienes el valor e.FormattedValue que ya te da directamente el valor (formateado) de la celda a validar.

    Espero que te sirva.

    Un saludo

    miércoles, 13 de marzo de 2019 8:14
  • pero es que solo quiero validar la primera columna nada mas, pero cuando empiezo a escribir y despues me cambio de celda y cuando entra el codigo me detecta que aun esta vacio, aun que los datos de la columna y la fila esten correctos y si uso el e.FormattedValue me validara todas las celdas de todas las columnas

    solo agregue (0, e.RowIndex).FormattedValue pero sigue saliendo el problema

    Edit:

    ya pude solucionarlo solo agregue una condición antes.

        Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
            If  e.ColumnIndex = 0 Then
                If IsNumeric(e.FormattedValue) Then
                    e.cancel = False
                Else
                    e.Cancel = True
                End If
            End If
        End Sub

    • Editado RHCRD miércoles, 13 de marzo de 2019 16:22 agregue solucion
    • Marcado como respuesta RHCRD miércoles, 13 de marzo de 2019 16:22
    miércoles, 13 de marzo de 2019 15:55