Datagridview validación celdas

12/09/2006 - 12:39 por Nhoa78 | Informe spam
Hola
Quiero validar el contenido de una celda de un datagridview. Para ello en la
función CellValidated del datagridview compruebo si los datos introducidos
cumplen el formato y lo que quiero es que si no cumple el formato no me deje
salir de la celda hasta que sea correcto, pero no se como volver a poner el
foco en la celda.

La función que utilizo es la siguiente:
Private Sub dgrid_CellValidated(ByVal sender As Object, ByVal e As
System.Windows.Forms.DataGridViewCellEventArgs) Handles dgrid.CellValidated

If Not Me.dgrid.Item(e.ColumnIndex, e.RowIndex).Value Is Nothing Then
Dim sMensaje As String =
oComun.ComprobarFormato(Me.dgrid.Item(e.ColumnIndex, e.RowIndex).Value,
Me.dgrid.Columns(e.ColumnIndex).Name, 0) --si el formato es incorrecto
devuelve un mensaje de error
If sMensaje <> "" Then
MsgBox(sMensaje , MsgBoxStyle.Exclamation, "Error")
' Me.dgLineasMP.Item(e.ColumnIndex, e.RowIndex).Value =
iValorAnterior
'Me.dgLineasMP.CurrentCell = Me.dgLineasMP(e.ColumnIndex,
e.RowIndex)
'Me.dgLineasMP.Focus()

End If
End If
End Sub


Gracias

Preguntas similare

Leer las respuestas

#1 Luis Miguel Blanco
12/09/2006 - 18:31 | Informe spam
Hola Nhoa78

Para validar la edición de una celda en el control DataGridView utiliza
mejor el evento CellValidating, ya que en su parámetro
DataGridViewCellValidatingEventArgs dispones de la propiedad Cancel, la cual
puedes asignar a True en el caso de que el valor introducido por el usuario
sea incorrecto, obligándole a permanecer en la celda hasta que no teclee el
dato adecuado.

'//////////////////////////////
Private Sub grdDatos_CellValidating(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles
grdDatos.CellValidating

' si el dato no es correcto asignas lo siguiente:
e.Cancel = True

End Sub
'//////////////////////////////

El evento CellValidated que estás usando se produce después de haber
ocurrido la validación, por lo que no es el adecuado para esta operación que
necesitas hacer.

Espero que te sea de utilidad.
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Nhoa78" wrote:

Hola
Quiero validar el contenido de una celda de un datagridview. Para ello en la
función CellValidated del datagridview compruebo si los datos introducidos
cumplen el formato y lo que quiero es que si no cumple el formato no me deje
salir de la celda hasta que sea correcto, pero no se como volver a poner el
foco en la celda.

La función que utilizo es la siguiente:
Private Sub dgrid_CellValidated(ByVal sender As Object, ByVal e As
System.Windows.Forms.DataGridViewCellEventArgs) Handles dgrid.CellValidated

If Not Me.dgrid.Item(e.ColumnIndex, e.RowIndex).Value Is Nothing Then
Dim sMensaje As String =
oComun.ComprobarFormato(Me.dgrid.Item(e.ColumnIndex, e.RowIndex).Value,
Me.dgrid.Columns(e.ColumnIndex).Name, 0) --si el formato es incorrecto
devuelve un mensaje de error
If sMensaje <> "" Then
MsgBox(sMensaje , MsgBoxStyle.Exclamation, "Error")
' Me.dgLineasMP.Item(e.ColumnIndex, e.RowIndex).Value =
iValorAnterior
'Me.dgLineasMP.CurrentCell = Me.dgLineasMP(e.ColumnIndex,
e.RowIndex)
'Me.dgLineasMP.Focus()

End If
End If
End Sub


Gracias
Respuesta Responder a este mensaje
#2 Nhoa78
13/09/2006 - 11:04 | Informe spam
Hola
He utilizado el evento CellValidating pero en vez de cogerme el valor nuevo
introducido me coge el valor que contenia anteriormente la casilla.

"Luis Miguel Blanco" escribió:

Hola Nhoa78

Para validar la edición de una celda en el control DataGridView utiliza
mejor el evento CellValidating, ya que en su parámetro
DataGridViewCellValidatingEventArgs dispones de la propiedad Cancel, la cual
puedes asignar a True en el caso de que el valor introducido por el usuario
sea incorrecto, obligándole a permanecer en la celda hasta que no teclee el
dato adecuado.

'//////////////////////////////
Private Sub grdDatos_CellValidating(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles
grdDatos.CellValidating

' si el dato no es correcto asignas lo siguiente:
e.Cancel = True

End Sub
'//////////////////////////////

El evento CellValidated que estás usando se produce después de haber
ocurrido la validación, por lo que no es el adecuado para esta operación que
necesitas hacer.

Espero que te sea de utilidad.
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Nhoa78" wrote:

> Hola
> Quiero validar el contenido de una celda de un datagridview. Para ello en la
> función CellValidated del datagridview compruebo si los datos introducidos
> cumplen el formato y lo que quiero es que si no cumple el formato no me deje
> salir de la celda hasta que sea correcto, pero no se como volver a poner el
> foco en la celda.
>
> La función que utilizo es la siguiente:
> Private Sub dgrid_CellValidated(ByVal sender As Object, ByVal e As
> System.Windows.Forms.DataGridViewCellEventArgs) Handles dgrid.CellValidated
>
> If Not Me.dgrid.Item(e.ColumnIndex, e.RowIndex).Value Is Nothing Then
> Dim sMensaje As String =
> oComun.ComprobarFormato(Me.dgrid.Item(e.ColumnIndex, e.RowIndex).Value,
> Me.dgrid.Columns(e.ColumnIndex).Name, 0) --si el formato es incorrecto
> devuelve un mensaje de error
> If sMensaje <> "" Then
> MsgBox(sMensaje , MsgBoxStyle.Exclamation, "Error")
> ' Me.dgLineasMP.Item(e.ColumnIndex, e.RowIndex).Value =
> iValorAnterior
> 'Me.dgLineasMP.CurrentCell = Me.dgLineasMP(e.ColumnIndex,
> e.RowIndex)
> 'Me.dgLineasMP.Focus()
>
> End If
> End If
> End Sub
>
>
> Gracias
Respuesta Responder a este mensaje
#3 Luis Miguel Blanco
13/09/2006 - 18:30 | Informe spam
En el siguiente ejemplo de código, tengo un control DataGridView en el que
hago una validación para un campo de tipo numérico. En él, si el usuario
teclea por ejemplo la cadena "aaa", al ejecutar el siguiente código, no pasa
la validación, pero el control sigue mostrando en la celda la cadena "aaa".
Debes tener en cuenta que sólo tienes que ejecutar "e.Cancel = True" cuando
la validación no sea correcta.

'//////////////////////////////////////////
Private Sub grdDatos_CellValidating(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) _
Handles grdDatos.CellValidating

Dim nNumero As Integer
Dim oDGVC As DataGridViewColumn = Me.grdDatos.Columns(e.ColumnIndex)

If oDGVC.DataPropertyName = "Importe" Then
If e.FormattedValue.ToString().Length > 0 Then
If Not Integer.TryParse(e.FormattedValue, nNumero) Then
MessageBox.Show("Sólo se permiten números")
e.Cancel = True
End If
End If
End If
End Sub
'//////////////////////////////////////////

Espero que este ejemplo te sea de ayuda
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Nhoa78" wrote:


Hola
He utilizado el evento CellValidating pero en vez de cogerme el valor nuevo
introducido me coge el valor que contenia anteriormente la casilla.

"Luis Miguel Blanco" escribió:

> Hola Nhoa78
>
> Para validar la edición de una celda en el control DataGridView utiliza
> mejor el evento CellValidating, ya que en su parámetro
> DataGridViewCellValidatingEventArgs dispones de la propiedad Cancel, la cual
> puedes asignar a True en el caso de que el valor introducido por el usuario
> sea incorrecto, obligándole a permanecer en la celda hasta que no teclee el
> dato adecuado.
>
> '//////////////////////////////
> Private Sub grdDatos_CellValidating(ByVal sender As System.Object, ByVal e
> As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles
> grdDatos.CellValidating
>
> ' si el dato no es correcto asignas lo siguiente:
> e.Cancel = True
>
> End Sub
> '//////////////////////////////
>
> El evento CellValidated que estás usando se produce después de haber
> ocurrido la validación, por lo que no es el adecuado para esta operación que
> necesitas hacer.
>
> Espero que te sea de utilidad.
> Un saludo
> Luis Miguel Blanco
> http://www.dotnetmania.com
>
>
> "Nhoa78" wrote:
>
> > Hola
> > Quiero validar el contenido de una celda de un datagridview. Para ello en la
> > función CellValidated del datagridview compruebo si los datos introducidos
> > cumplen el formato y lo que quiero es que si no cumple el formato no me deje
> > salir de la celda hasta que sea correcto, pero no se como volver a poner el
> > foco en la celda.
> >
> > La función que utilizo es la siguiente:
> > Private Sub dgrid_CellValidated(ByVal sender As Object, ByVal e As
> > System.Windows.Forms.DataGridViewCellEventArgs) Handles dgrid.CellValidated
> >
> > If Not Me.dgrid.Item(e.ColumnIndex, e.RowIndex).Value Is Nothing Then
> > Dim sMensaje As String =
> > oComun.ComprobarFormato(Me.dgrid.Item(e.ColumnIndex, e.RowIndex).Value,
> > Me.dgrid.Columns(e.ColumnIndex).Name, 0) --si el formato es incorrecto
> > devuelve un mensaje de error
> > If sMensaje <> "" Then
> > MsgBox(sMensaje , MsgBoxStyle.Exclamation, "Error")
> > ' Me.dgLineasMP.Item(e.ColumnIndex, e.RowIndex).Value =
> > iValorAnterior
> > 'Me.dgLineasMP.CurrentCell = Me.dgLineasMP(e.ColumnIndex,
> > e.RowIndex)
> > 'Me.dgLineasMP.Focus()
> >
> > End If
> > End If
> > End Sub
> >
> >
> > Gracias
Respuesta Responder a este mensaje
#4 Nhoa78
14/09/2006 - 09:07 | Informe spam
Muchas gracias.

"Luis Miguel Blanco" escribió:

En el siguiente ejemplo de código, tengo un control DataGridView en el que
hago una validación para un campo de tipo numérico. En él, si el usuario
teclea por ejemplo la cadena "aaa", al ejecutar el siguiente código, no pasa
la validación, pero el control sigue mostrando en la celda la cadena "aaa".
Debes tener en cuenta que sólo tienes que ejecutar "e.Cancel = True" cuando
la validación no sea correcta.

'//////////////////////////////////////////
Private Sub grdDatos_CellValidating(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) _
Handles grdDatos.CellValidating

Dim nNumero As Integer
Dim oDGVC As DataGridViewColumn = Me.grdDatos.Columns(e.ColumnIndex)

If oDGVC.DataPropertyName = "Importe" Then
If e.FormattedValue.ToString().Length > 0 Then
If Not Integer.TryParse(e.FormattedValue, nNumero) Then
MessageBox.Show("Sólo se permiten números")
e.Cancel = True
End If
End If
End If
End Sub
'//////////////////////////////////////////

Espero que este ejemplo te sea de ayuda
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Nhoa78" wrote:

>
> Hola
> He utilizado el evento CellValidating pero en vez de cogerme el valor nuevo
> introducido me coge el valor que contenia anteriormente la casilla.
>
> "Luis Miguel Blanco" escribió:
>
> > Hola Nhoa78
> >
> > Para validar la edición de una celda en el control DataGridView utiliza
> > mejor el evento CellValidating, ya que en su parámetro
> > DataGridViewCellValidatingEventArgs dispones de la propiedad Cancel, la cual
> > puedes asignar a True en el caso de que el valor introducido por el usuario
> > sea incorrecto, obligándole a permanecer en la celda hasta que no teclee el
> > dato adecuado.
> >
> > '//////////////////////////////
> > Private Sub grdDatos_CellValidating(ByVal sender As System.Object, ByVal e
> > As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles
> > grdDatos.CellValidating
> >
> > ' si el dato no es correcto asignas lo siguiente:
> > e.Cancel = True
> >
> > End Sub
> > '//////////////////////////////
> >
> > El evento CellValidated que estás usando se produce después de haber
> > ocurrido la validación, por lo que no es el adecuado para esta operación que
> > necesitas hacer.
> >
> > Espero que te sea de utilidad.
> > Un saludo
> > Luis Miguel Blanco
> > http://www.dotnetmania.com
> >
> >
> > "Nhoa78" wrote:
> >
> > > Hola
> > > Quiero validar el contenido de una celda de un datagridview. Para ello en la
> > > función CellValidated del datagridview compruebo si los datos introducidos
> > > cumplen el formato y lo que quiero es que si no cumple el formato no me deje
> > > salir de la celda hasta que sea correcto, pero no se como volver a poner el
> > > foco en la celda.
> > >
> > > La función que utilizo es la siguiente:
> > > Private Sub dgrid_CellValidated(ByVal sender As Object, ByVal e As
> > > System.Windows.Forms.DataGridViewCellEventArgs) Handles dgrid.CellValidated
> > >
> > > If Not Me.dgrid.Item(e.ColumnIndex, e.RowIndex).Value Is Nothing Then
> > > Dim sMensaje As String =
> > > oComun.ComprobarFormato(Me.dgrid.Item(e.ColumnIndex, e.RowIndex).Value,
> > > Me.dgrid.Columns(e.ColumnIndex).Name, 0) --si el formato es incorrecto
> > > devuelve un mensaje de error
> > > If sMensaje <> "" Then
> > > MsgBox(sMensaje , MsgBoxStyle.Exclamation, "Error")
> > > ' Me.dgLineasMP.Item(e.ColumnIndex, e.RowIndex).Value =
> > > iValorAnterior
> > > 'Me.dgLineasMP.CurrentCell = Me.dgLineasMP(e.ColumnIndex,
> > > e.RowIndex)
> > > 'Me.dgLineasMP.Focus()
> > >
> > > End If
> > > End If
> > > End Sub
> > >
> > >
> > > Gracias
Respuesta Responder a este mensaje
#5 Williams
21/09/2006 - 20:35 | Informe spam
Mira camarada. Es correcto hacer la validacion en el evento CellValidating.
Sin embargo, creo que tu problema no es la validacion sino que te valida el
valor que tenia anteriormente y muchas veces te valida un valor "null" cuando
es la primer vez que entras a esa celda.

Me ocurrio una vez. Lo unico que tienes que hacer es:

MyGrid.EndEdit();

Esto va antes de validar el contenido de la celda. Si no pasa la validacion
entonces pones:

e.cancel=true;

Obviamente el codigo esta en C# pero es lo mismo para Visual Basic solo que
sin los punto y coma.

Espero no sea muy tarde. Lo que pasa es que ahora ando buscando ponerle mas
crema a eso. Quiero que si la celda debe aceptar solo numeros, deseo que no
se escriba nada si la tecla pulsada es una letra, pero esta en chino. jaja.
No es tan facil como con los TextBoxes.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida