SoloCodigo
CLR: .Net / Mono / Boo / Otros CLR => VB .NET => Mensaje iniciado por: Laforge en Miércoles 22 de Diciembre de 2004, 16:37
-
Hola de nuevo!
Bueno mi nuevo caso es el siguiente: :lightsabre:
Tengo una aplicación con un único formulario (Form1), dónde hay un DataGrid vinculado a un DataSet.
Inicializo el DataGrid con el DataSet vacío y voy entrando contenidos. Cada vez que salto de registro actualizo la BBDD con el nuevo registro.
El mismo problema me aparece en dos casos distintos:
:comp:
1ro: Tengo una parte de código que controla cuando se pulsa la tecla ESC y pregunta a través de un msgbox tipo "yes/no" si se desean eliminar los datos entrados hasta el momento en la BBDD. Pues bién, si lo digo que SÍ, los borra, pero al volver a dar el control al formulario salta la excepción: "Referencia a objeto no establecida como instancia de objeto" y me señala el "Public Class Form1". Esta es la parte de código:
Case keyData.Escape
Dim respuesta As DialogResult
respuesta = MsgBox("Está seguro que desea descartar los datos?",MsgBoxStyle.YesNo)
If respuesta = DialogResult.Yes
TrabajoAdapter.DeleteCommand.CommandText = "DELETE * FROM Trabajo1"
Data1.Trabajo1.Clear()
Try
ConectaBD()
TrabajoAdapter.DeleteCommand.ExecuteNonQuery()
DesconectaBD()
Catch ex As Exception
MessageBox.Show(ex.Message)
DesconectaBD()
End Try
Else
Repite=1
Grid1.CurrentCell= New DataGridCell(FilAct,0)
End If
2o: Una parte del código que controla si el registro introducido ya existe. Si es así, lo que hace es aumentar una unidad la referencia especificada y borra la línea nueva introducida. Al introducir una referencia repetida la primera vez, lo hace sin problemas, pero al repetir la operación tres veces en la misma casilla me salta, otra vez el error de "Referencia a objeto no establecida como instancia de objeto", señalándome, otra vez "Public Class Form1". Este es el código:
Private Sub Grid1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Grid1.CurrentCellChanged
Select Case Grid1.CurrentCell.ColumnNumber
Case 0
If Repite = 1 Then Exit Sub
ArticAct = Grid1.Item(FilAct, 0)
Repite = 1
If Grid1.VisibleRowCount > 2 Then
For i = 0 To Grid1.VisibleRowCount - 2
If ArticAct = Grid1.Item(i, 0) And i <> FilAct Then
CdadAct = Grid1.Item(i, 2) + 1
PvpAct = Grid1.Item(i, 3)
DtoAct = Grid1.Item(i, 4)
Suma() 'función que obtiene el precio parcial: cantidadxprecio
Actualiza() 'update o insert, segun el caso, de datos en BBDD
Data1.Trabajo1.Rows(FilAct).Delete()
PonFoco(FilAct, 0) 'evita que el foco se desplace hacia abajo
Exit Sub
End If
Next i
End If
Grid1.Item(FilAct, 0) = Nothing
BuscaArticulo()
Repite = 0
Alguna idea de lo que puede ocurrir? Por lo que parece debe venir del mismo sitio... :whistling:
Saludos y...siento el palizón... :D
-
Hola otra vez.
Solucioné el segundo caso! :D :smartass:
Lo hice quitando la instrucción marcada en rojo y modificando la posición de la instrucción marcada en amarillo hacia donde está la misma en azul (básicamente, situe el foco en la celda anterior antes de proceder a realizar las instrucciones INSERT/UPDATE)
Private Sub Grid1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Grid1.CurrentCellChanged
Select Case Grid1.CurrentCell.ColumnNumber
Case 0
If Repite = 1 Then Exit Sub
ArticAct = Grid1.Item(FilAct, 0)
Repite = 1
If Grid1.VisibleRowCount > 2 Then
For i = 0 To Grid1.VisibleRowCount - 2
If ArticAct = Grid1.Item(i, 0) And i <> FilAct Then
PonFoco(FilAct, 0) 'evita que el foco se desplace hacia abajo
CdadAct = Grid1.Item(i, 2) + 1
PvpAct = Grid1.Item(i, 3)
DtoAct = Grid1.Item(i, 4)
Suma() 'función que obtiene el precio parcial: cantidadxprecio
Actualiza() 'update o insert, segun el caso, de datos en BBDD
Data1.Trabajo1.Rows(FilAct).Delete()
PonFoco(FilAct, 0) 'evita que el foco se desplace hacia abajo
Exit Sub
End If
Next i
End If
Grid1.Item(FilAct, 0) = Nothing
BuscaArticulo()
Repite = 0
...pero todavía me falta solucionar el primer caso....venga anímense, alguna idea???
:think:
Saludos
-
bueno no estoy seguro pero parece que declaras esto:
Dim respuesta As DialogResult
pero no lo has instanciaso, lo cual en vb.net debne ser algo como:
respuesta = new DialogResult
Espero que ese sea el problema.
-
Hola y gracias!
Lo estuve probando instanciando la variable "respuesta" i funcionó! :D ...pero el "problema" es que depués volví a probar sin instanciar i .....funcionó! :huh: Estuve revisando el código y ví que había algun cambio que hice de última hora, pero lo puse igualito, igualito (copy-paste) al que os envié y el único error que me da es de índice fuera de los límites de la matriz, el cual es fácilmente solucionable.
Bueno, lo dicho, gracias de todas formas JuanK!
Saludos y a seguir luchando :lightsabre:
Saludos