Visual Basic.NET - Editar datos de registros en el datagridview y guardar los cambios

 
Vista:
Imágen de perfil de Leopoldo Edgardo

Editar datos de registros en el datagridview y guardar los cambios

Publicado por Leopoldo Edgardo (1 intervención) el 11/06/2014 02:01:26
hola Muchachos, me estoy volviendo loco.
Les cuento soy nuevo en esto. Lo que hago es simplemente conectarme a una base de datos. veo los datos que tengo en un datagridview sin problemas. lo que hago tambien es poder filtrar por nombre y dni la base de datos. es decir a medida que voy tipiando el nombre en un textbox automáticamente se me filtra los datos del datagridview actualizándose. Y en otro Form agrego otro registro. Eso por ahora nomás.
Hasta que llegué a querer que con un boton que diga "editar" se habilita el datagridview para realizar modificaciones y otro botón "guardar" para justamente guardar los cambios.
Pero lo último me es imposible me tira error, que "el valor no puede ser nulo, Nombre del parámetro: dataTable"
acá les dejo el código, si me pueden aconsejar con errores de programación también estoy abierto a todo tipo de sugerencias...

Módulo:

Imports System.Data
Imports System.Data.OleDb
Module CargarInfo
Public conexion As New OleDbConnection
Public Sub conectar()
conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= D:\Escuela\Nuevo 2014\EMATP\Sistemas Visual Basic\Base de Datos\Base de Datos\bin\Debug\Basededatos.accdb"
conexion.Open()
End Sub
End Module

Form1:

Imports System.Data
Imports System.Data.OleDb
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
conectar()
mostrarDatos()
End Sub

'Acá mostramos los datos en el datagridview
Sub mostrarDatos()
Dim datosDataAdapter As New OleDbDataAdapter("select * from Alumnos", conexion)
Dim traerdatosDataSet As New DataSet
datosDataAdapter.Fill(traerdatosDataSet, "Alumnos")
DataGridView1.DataSource = traerdatosDataSet.Tables("Alumnos")
DataGridView1.Columns("Id").Visible = False
DataGridView1.ReadOnly = True
conexion.Close()
'Acá mostramos todos los datos y al Datagridview lo dejamos con la opción que no se puede editar ningún valor
End Sub

'Acá agregamos datos de Alumno nuevo
Private Sub ButtonAgregarAlumno_Click(sender As Object, e As EventArgs) Handles ButtonAgregarAlumno.Click
Form2.Show()
End Sub

Private Sub ButtonEditar_Click(sender As Object, e As EventArgs)
DataGridView1.ReadOnly = False
End Sub

Private Sub TextBoxFiltrar_TextChanged_1(sender As Object, e As EventArgs) Handles TextBoxFiltrar.TextChanged
'A partir de acá, el código es para filtrar la información del datagridview por Apellido
Try
If Not conexion.State = ConnectionState.Open Then
conectar()
'aca si no esta abierta la base de datos la abrimos
End If
Dim tablaDataAdapter As New OleDbDataAdapter("select * from Alumnos where APELLIDO like '" & (TextBoxFiltrar.Text) & "%'", conexion)
Dim almacenardatosDataSet As New DataSet
tablaDataAdapter.Fill(almacenardatosDataSet, "Alumnos")
DataGridView1.DataSource = almacenardatosDataSet.Tables("Alumnos")
conexion.Close()
'le pongo dataSet.Tables para que me muestre todas las filas, sino no me muestra ningún dato
Catch ex As Exception
MessageBox.Show(ex.Message)
'por si ocurre algún error que lo muestre
End Try
End Sub

Private Sub TextBoxFiltrarDni_TextChanged(sender As Object, e As EventArgs) Handles TextBoxFiltrarDni.TextChanged
'A partir de acá, el código es para filtrar la información del datagridview por DNI
Try
If Not conexion.State = ConnectionState.Open Then
conectar()
'aca si no esta abierta la base de datos la abrimos
End If
Dim tablaDataAdapter As New OleDbDataAdapter("select * from Alumnos where DNI like '" & (TextBoxFiltrarDni.Text) & "%'", conexion)
Dim almacenardatosDataSet As New DataSet
tablaDataAdapter.Fill(almacenardatosDataSet, "Alumnos")
DataGridView1.DataSource = almacenardatosDataSet.Tables("Alumnos")
conexion.Close()
'le pongo dataSet.Tables para que me muestre todas las filas, sino no me muestra ningún dato
Catch ex As Exception
MessageBox.Show(ex.Message)
'por si ocurre algún error que lo muestre
End Try
End Sub

Private Sub DataGridView1_RowHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.RowHeaderMouseClick
If DataGridView1.Rows.Count > 0 Then
'tiene datos cargados
If DataGridView1.SelectedRows.Count > 0 Then
'hay fila seleccionada y mostramos sus datos
TextBoxDniAlumno_Eliminar.Text = DataGridView1.SelectedRows(0).Cells("DNI").Value
End If
End If
End Sub

Private Sub ButtonEliminarAlumno_Click(sender As Object, e As EventArgs) Handles ButtonEliminarAlumno.Click
If Not conexion.State = ConnectionState.Open Then
conectar()
'aca si no esta abierta la base de datos la abrimos
End If
If DataGridView1.SelectedRows.Count > 0 Then
'hay filas seleccionadas
Dim comand As New OleDbCommand
comand.Connection = conexion
comand.CommandText = "delete from Alumnos where DNI='" & TextBoxDniAlumno_Eliminar.Text & "'"
comand.ExecuteNonQuery()
MsgBox("Alumno Eliminado")
TextBoxFiltrarDni.Text = ""
TextBoxFiltrar.Text = ""
TextBoxDniAlumno_Eliminar.Text = ""
mostrarDatos()
conexion.Close()
Else
MsgBox("No se ha seleccionado una fila")
End If

End Sub

Private Sub ButtonEditarGuardar_Click(sender As Object, e As EventArgs) Handles ButtonEditarGuardar.Click
Try
Dim datosDataAdapter As New OleDbDataAdapter
Dim traerdatosDataSet As New DataSet
datosDataAdapter.UpdateCommand = New OleDbCommand
datosDataAdapter.UpdateCommand.CommandText = "update Alumnos set APELLIDO= @ape, NOMBRES=@nom, DNI=@dni where Id=@id"
datosDataAdapter.UpdateCommand.Parameters.Add("@id", OleDbType.BigInt, 100, "Id")
datosDataAdapter.UpdateCommand.Parameters.Add("@ape", OleDbType.VarChar, 180, "APELLIDO")
datosDataAdapter.UpdateCommand.Parameters.Add("@nom", OleDbType.VarChar, 180, "NOMBRES")
datosDataAdapter.UpdateCommand.Parameters.Add("@dni", OleDbType.VarChar, 180, "DNI")
datosDataAdapter.UpdateCommand.Connection = conexion
datosDataAdapter.Update(traerdatosDataSet.Tables("Alumnos"))
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class


y Form2 "que es para agregar registro" y si encuentra que el que quiero agregar se repite el DNI, que no me deje

Imports System.Data
Imports System.Data.OleDb
Public Class Form2
Public valor As String
Sub VerificarDni_Repetido()
If Not conexion.State = ConnectionState.Open Then
conectar()
'aca si no esta abierta la base de datos la abrimos
End If
Dim tablaDataAdapter As New OleDbDataAdapter("select * from Alumnos where DNI = ('" & TextBoxNuevoDni.Text & "')", conexion)
Dim datset As New DataSet
tablaDataAdapter.Fill(datset, "Alumnos")
conexion.Close()
If (datset.Tables(0).Rows.Count = 0) Then
'no encontro otro DNI igual
valor = "no"
Else
valor = "si"
End If
datset.Dispose()
End Sub

Private Sub ButtonGuardarAlumno_Click(sender As Object, e As EventArgs) Handles ButtonGuardarAlumno.Click
Try
VerificarDni_Repetido()
If Not conexion.State = ConnectionState.Open Then
conectar()
'aca si no esta abierta la base de datos la abrimos
End If
If valor = "si" Then
MsgBox("El Alumno que desea ingresar ya se encuentra registrado")
Else
Dim comand As New OleDbCommand
comand.Connection = conexion
comand.CommandText = "insert into Alumnos (APELLIDO,NOMBRES,DNI) values ('" & TextBoxNuevoApellido.Text & "', '" & TextBoxNuevoNombres.Text & "', '" & TextBoxNuevoDni.Text & "')"
comand.ExecuteNonQuery()
MsgBox("Alumno Cargado")
Form1.mostrarDatos()
conexion.Close()
Me.Close()
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class

Se los agradecería infinitamente, desde ya muchas gracias!!! Leopoldo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder