Autor
|
Tema: Validaciones (Leído 26,406 veces)
|
piwi
Desconectado
Mensajes: 439
|
Gracias por las respuestas.
Pero al final hay alguna manera de no permitir al usuario abandonar una celda en caso que no cumpla la condición como por ejemplo un campo que tenga que rellenarlo?
|
|
|
En línea
|
|
|
|
43H4FH44H45H4CH49H56H45H
Wiki
Desconectado
Mensajes: 502
|
Bueno este modo es "cutre", pero puedes mejorarlo: private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { try { string pru = dataGridView1.Rows[0].Cells[0].Value.ToString(); } catch (Exception) { if (dataGridView1.Rows[0].Cells[0].Selected != true) MessageBox.Show("Inserte ID "); } }
Tienes que cambiar los valores de Rows a medida que se hacen las validaciones, lo que hace es tratar de llenar un string con el valor de la 1era fila y celda cuando se hace click en alguna celda que no sea la 1era, si este esta vacio muestra el mensaje. Seguro hay otro modo mejor, pero puedes probarlo.
|
|
|
En línea
|
-R IP :0100 -A 100 2826:0100 MOV AH,09 2826:0102 MOV DX,109 2826:0105 INT 21 2826:0105 MOV AH,08 2826:0105 INT 21 2826:0107 INT 20 2826:0109 DB 'MI NICK ES CODELIVE.$' 2826:0127 -R BX :0000 -R CX :20 -N CODELIVE.COM -W
|
|
|
|
piwi
Desconectado
Mensajes: 439
|
Los eventos que estoy utilizando para validar los datos son cellvalidating con el e.cances y dataerror también con su e.cancel correspondiente.
A mi me gusta tambén más utilizar en vez de datagrid, campos simples o como se diga (en origen de datos poner modo detalle) pero tengo problemas con un campo que le he dicho que es de tipo combobox.
Ahora estoy intentando averigual como puedo insertar el código (un numerico) pero quiero hacerlo yo y no que sea autoincremental.
Con el problema con el que me encuentro que no soy capaz de capturar la linea insertada ya que el evento se lanza antes de insertar la línea y es donde lo capturo por lo que siempre me devuelve row 0
|
|
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Los eventos que estoy utilizando para validar los datos son cellvalidating con el e.cances y dataerror también con su e.cancel correspondiente.
Bueno con los enlaces que te pasé debes solucionar el problema. Sino postea el código de la validación. Ahora estoy intentando averigual como puedo insertar el código (un numerico) pero quiero hacerlo yo y no que sea autoincremental.
Simplemente lo pones, y ya, Que no sea Identity en la Base de Datos y lo metes en la consulta del insert. Con el problema con el que me encuentro que no soy capaz de capturar la linea insertada ya que el evento se lanza antes de insertar la línea y es donde lo capturo por lo que siempre me devuelve row 0
A ver, que no entendí bien, estás intentando guardar en el evento de cellvalidating? Puedes intentar guardar en el evento RowLeave o mucho mejor en el RowValidated despues de pasar por un RowValidating.
|
|
|
En línea
|
|
|
|
piwi
Desconectado
Mensajes: 439
|
En el momento de dar al nuevo registro en bindingdourcenavigation, quiero meter en la celda un valor pero no se en que evento lo tengo que hacer porque no se seleccionar bien la nueva fila del datagridview
|
|
|
En línea
|
|
|
|
piwi
Desconectado
Mensajes: 439
|
Hola
Estoy haciendo pruebas de lo más sencillo y no encuentro la solución.
Estoy intentando mantener una tabla con dos campos:
idfabricante clave primaria no nula d_fabricante
Para ello he creado un origne de datos de esta tabla y lo he arrastrado al formulario.
He codificado los siguientes eventos:
En este evento he añadido a mayores el chequeo del validate por si no pasa la validación que no siga con los cambios.
Private Sub FABRICANTEBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FABRICANTEBindingNavigatorSaveItem.Click Dim li_retorno As Integer
li_retorno = Me.Validate()
If li_retorno = -1 Then Me.FABRICANTEBindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(Me.FabricanteDataSet) End If
End Sub
Esto ha sido creado por vb al arrastrar el origen de datos.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'TODO: esta línea de código carga datos en la tabla 'FabricanteDataSet.FABRICANTE' Puede moverla o quitarla según sea necesario. Me.FABRICANTETableAdapter.Fill(Me.FabricanteDataSet.FABRICANTE)
End Sub
Aquí compruebo si idfabricante está nulo
Private Sub FABRICANTEDataGridView_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles FABRICANTEDataGridView.CellValidating If FABRICANTEDataGridView.Columns(e.ColumnIndex).Name = "DataGridViewTextBoxColumn1" Then If e.FormattedValue IsNot Nothing AndAlso _ String.IsNullOrEmpty(e.FormattedValue.ToString()) Then
e.Cancel = True Else e.Cancel = False End If End If
End Sub
En este he metido un mensaje de aviso por si dan a guardar o al nuevo en bindingnavigator
Private Sub FABRICANTEDataGridView_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles FABRICANTEDataGridView.DataError MsgBox(e.Exception.Message) e.Cancel = True End Sub
Validación de la fila
Private Sub FABRICANTEDataGridView_RowValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles FABRICANTEDataGridView.RowValidating If FABRICANTEDataGridView(0, e.RowIndex).Value Is DBNull.Value Then MsgBox("Error") e.Cancel = True Else e.Cancel = False
End If End Sub
Los dos siguientes son de prueba pero me da error de nulo por lo que creo que no me inserta el valor
Private Sub FABRICANTEDataGridView_RowLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles FABRICANTEDataGridView.RowLeave If FABRICANTEDataGridView(0, e.RowIndex).Value Is DBNull.Value Then FABRICANTEDataGridView(0, e.RowIndex).Value = UltimoCodigo() End If
End Sub
Private Sub FABRICANTEDataGridView_RowValidated(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles FABRICANTEDataGridView.RowValidated If String.IsNullOrEmpty(FABRICANTEDataGridView(0, e.RowIndex).Value) Then FABRICANTEDataGridView(0, e.RowIndex).Value = UltimoCodigo() End If End Sub
Función que me retorna el último id
Private Function UltimoCodigo() As Integer
Dim Conexion As New SqlConnection("Data Source=192.168.1.100;Initial Catalog=PRUEBAS;user id = piwi; password =piwi;") Dim Datos As New DataSet
Dim li_ultimo As Integer
Conexion.Open()
Dim Adaptador As New SqlDataAdapter("SELECT MAX(IDFABRICANTE) FROM FABRICANTE", Conexion)
Adaptador.Fill(Datos)
li_ultimo = Datos.Tables(0).Rows(0).Item(0)
li_ultimo = li_ultimo + 1
Conexion.Close()
Return li_ultimo
End Function
Con esto no me funciona, donde tengo que asignar el valor al idfabricante para que lo tenga antes de que cambie de fila o que de al boton guardar?
|
|
« Última modificación: 8 Julio 2010, 08:33 am por piwi »
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Hola, Primero, en el evento DataError, no se por qué estás haciendo e.Cancel = True. Eso no lo deberías hacer, ese evento es para controlar luego de que se produce un error. El Id del fabricante tienes que hacerlo al darle guardar, SIEMPRE, porque imagínate que lo pones al seleccionar la fila, por ejemplo; y te sale el ID 10001 y en otro equipo alguien abre la aplicación y y selecciona otra fila, le aparece el ID 10001, entonces lo que pasa es que al guardar se va a producir un error. Por lo que es mejor SIEMPRE que crees el ID en la base de datos EDIT, utiliza las etiquetas Geshi para postear código.
|
|
|
En línea
|
|
|
|
piwi
Desconectado
Mensajes: 439
|
Probare lo que me dices. En el evento de borrar quiero poner el mensaje si esta seguro pero no soy capaz de parar el borrado ya que el return no funciona y sigue hacia delante. Lo de calcular el id por la base de datos se hace desde vb? No quiero utilizar los autonumericos
|
|
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
¿Cuál es el problema de usar autonuméricos? Ah ok, lo de si está seguro o no, tiene que ser ANTES de comenzar el borrado
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
validaciones en textbox
.NET (C#, VB.NET, ASP)
|
basickdagger
|
3
|
4,270
|
13 Septiembre 2011, 18:44 pm
por basickdagger
|
|
|
Ayuda con Validaciones
.NET (C#, VB.NET, ASP)
|
tukubanitorico
|
0
|
1,676
|
5 Marzo 2012, 20:26 pm
por tukubanitorico
|
|
|
Problema con validaciones
Programación C/C++
|
ZedGe
|
2
|
2,160
|
9 Diciembre 2012, 07:44 am
por rir3760
|
|
|
Validaciones 2 digitos en c++
Programación C/C++
|
socram7
|
3
|
2,618
|
13 Junio 2013, 23:24 pm
por pacoperico
|
|
|
Validaciones TextBox
Programación Visual Basic
|
MC.cover
|
2
|
2,178
|
6 Noviembre 2016, 01:49 am
por MC.cover
|
|