Foros del Web » Programación para mayores de 30 ;) » .NET »

Eventos del DataGridView

Estas en el tema de Eventos del DataGridView en el foro de .NET en Foros del Web. hola amigos del foro: Aqui estoy yo de nuevo con otra duda. Ahora estoy tratando de validar una celda de un datagridview con una expresion ...
  #1 (permalink)  
Antiguo 27/04/2010, 08:24
 
Fecha de Ingreso: julio-2008
Mensajes: 52
Antigüedad: 15 años, 9 meses
Puntos: 0
Eventos del DataGridView

hola amigos del foro:

Aqui estoy yo de nuevo con otra duda. Ahora estoy tratando de validar una celda de un
datagridview con una expresion regular. lo que pasa es que no se en cual evento se
realizaria mejor yo lo que quiero que haga es lo siguiente

tengo el datagrid de la siguiente manera


Cantidad Clave Descripcion Kilataje Peso Avaluo Prestamo

2 0002 JOYAS-ARETES 12 56.789


A la hora de escribir el peso de la prenda quiero validar si la cantidad que escribi
en este caso el 56.789 es correcto para eso uso la siguiente expresion regular:

Private Function validar_peso(ByVal speso As String) As Boolean
Try
Return Regex.IsMatch(speso, "^[0-9]{1,5}([.]?[0-9]{1,2})?$")

Catch ex As Exception
MsgBox(Err.Description, MsgBoxStyle.Critical, "ERROR")
End Try
End Function

En este caso me tiene que dar un error porque solo se admiten hasta 2 decimales
el codigo donde valido es el siguiente:

Private Sub dgPrendas_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgPrendas.CellEndEdit
Try
If Me.dgPrendas.Item(5, e.RowIndex).Value.ToString <> "" Then
Dim speso = Me.dgPrendas.Item(5, e.RowIndex).Value.ToString
If (validar_peso(speso) = False) Then
MsgBox("Escribe una cantidad válida recuerda que solo debe contener hasta 2 decimales, vuelva a escribir el Peso de la Prenda", MsgBoxStyle.Information, "Registrar Prendas")
Me.dgPrendas.Item(5, e.RowIndex).Selected = True
Exit Sub
End If
End If
CalcularAvaluoYprestamo(e.RowIndex)

Catch ex As Exception
If Err.Number = 91 Then
Exit Sub
End If

End Try
End Sub

Aqui estoy usando el evento CellEndEdit pero no se si sea el correcto o no para lo que quiero
hacer es por eso que pido yo ayuda. Yo quiero que cuando termine de escribir el peso despues
de que se evalua si es correcto o no. En caso de que no lo sea que me regrese el foco a la
celda y no me deje avanzar hasta que este error se haya corregido.
Lo malo aqui es que no encuentro la propiedad focus de la celda por eso utilizo la linea
Me.dgPrendas.Item(5, e.RowIndex).Selected = True

Alguien me podría decir que evento me conviene utilizar para lo que necesito??
y como puedo regresar el foco a la celda cuantas veces necesite hasta que no se haya corregido
el error??

De antemo a todos por su ayuda mil gracias.
  #2 (permalink)  
Antiguo 27/04/2010, 09:48
 
Fecha de Ingreso: agosto-2008
Mensajes: 101
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: Eventos del DataGridView

Hola.

¿Que tipo de celda utilizas en el DataGrid? ¿Es una celda TextBox?

Si es una celda tipo TextBox, para hacer esta validacion puedes crear eventos para esa columna. Esa celda es un tipo TextBox, entonces podras crear los eventos que tiene implementados ese.

Mira este ejemplo aqui a una columna TextBox se le crear tres eventos, esto se hace en el evento EditingControlShowing de tu DataGrid:

Código PHP:

    
Private Sub MiGrid_EditingControlShowing(ByVal sender As ObjectByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgsHandles MiGrid.EditingControlShowing

'Si el control es tipo TextBox
        If TypeOf e.Control Is System.Windows.Forms.TextBox Then
            Dim validar As TextBox = CType(e.Control, TextBox)

            '
Agregamos varios eventos para ese TextBox 
            AddHandler validar
.KeyPressAddressOf validar_Keypress
            AddHandler validar
.TextChangedAddressOf validar_TextChanged
            AddHandler validar
.ValidatedAddressOf validar_Validated
            AddHandler validar
.LostFocusAddressOf validar_LostFocus

        End 
If
 
End Sub 
Hemos creados los eventos ahora tenemos que implementarlos, solo implementare el primero del evento Keypress o sea a presionar una tecla:

Código PHP:

 
Private Sub validar_Keypress_
         ByVal sender 
As Object_
         ByVal e 
As System.Windows.Forms.KeyPressEventArgs)

        
' obtener indice de la columna  
        Dim columna As Integer = MiGrid.CurrentCell.ColumnIndex
        Dim txt As TextBox = CType(sender, TextBox)


        ' 
comprobar si la celda en edición corresponde a la columna textbox 
'Pones el indice de tu columna para este ejemplo es la cero
        If columna = 0 Then


         '
Aqui harias tu validacion

            End 
If
        
End If


    
End Sub 
Asi implementas cualquier evento del Control TextBox.

Saludos.

Etiquetas: datagridview, eventos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:35.