lunes, 15 de marzo de 2010

Guardar y eliminar registros en DataGridview

Ejemplo para actualizar y guardar cambios realizados en un control DataGridview

El ejemplo tiene tres botones , uno para actualizar los cambios realizados enla grilla, otro para eliminar el registro seleccionado y otro para crear uno nuevo

Controles en un windows form
  • Un DataGridview
  • Tres controles Button ( btn_delete, btn_Update, btn_new) para eliminar, guardar y crear un nuevo registro
  • Cuatro button ( btn_first, btn_Previous, btn_next y btn_last) para moverse por los registros de la tabla usando los métodos MoveFirst , MoveNext etc.. del componente Bindingsource
  • Establecer la cadena de conexión y la instrucción sql para cargar la tabla en el datagridview
Código fuente
Option Explicit On Option Strict On
' Espacios de nombres
' '''''''''''''''''''''''''''''''''''''''''
Imports System.Data.SqlClient
Public Class Form1
'BindingSource
Private WithEvents bs As New BindingSource
' Adaptador de datos sql
Private SqlDataAdapter As SqlDataAdapter
' Cadena de conexión
Private Const cs As String = "Data Source=(local)\SQLEXPRESS;" & _ "Initial Catalog=demo_bd;" & _ "Integrated Security=true"
' flag
Private bEdit As Boolean
' actualizar los cambios al salir
' ''''''''''''''''''''''''''''''''''''''''
Private Sub Form1_FormClosing(ByVal sender As Object,ByVal e As_ System.Windows.Forms.FormClosingEventArgs)Handles Me.FormClosing
If bEdit Then
'preguntar si se desea guardar
If (MsgBox( "Guardar cambios ?",MsgBoxStyle.YesNo, _ "guardar")) = MsgBoxResult.Yes Then
Actualizar(False)
End If
End If
End Sub
Private Sub Form1_Load( ByVal sender As System.Object,ByVal e As System.EventArgs)_ Handles MyBase.Load
' propiedades del datagrid
' '''''''''''''''''''''''''''''''''''''
With DataGridView1
' alternar color de filas
.AlternatingRowsDefaultCellStyle.BackColor = Color.FloralWhite .DefaultCellStyle.BackColor = Color.Beige
' Establecer el origen de datos para el DataGridview
.DataSource = bs
End With
' botones
' '''''''''''''''''''''''''''''''''''''
btn_Update.Text = "Guardar cambios"
btn_delete.Text = "Eliminar registro"
btn_new.Text = "Nuevo"
btn_first.Text = "<<"
btn_Previous.Text = "<"
btn_next.Text = ">"
btn_last.Text = ">>"
' cagar los datos
cargar_registros("Select * From alumnos Order by Apellido", DataGridView1) End Sub
Private Sub cargar_registros(ByVal sql As String,ByVal dv As ataGridView) Try
'Inicializar SqlDataAdapter indicandole el comando y connectionstring
SqlDataAdapter = New SqlDataAdapter(sql, cs)
Dim SqlCommandBuilder As New SqlCommandBuilder(SqlDataAdapter)
' llenar el DataTable
Dim dt As New DataTable()
SqlDataAdapter.Fill(dt)
' Enlazar el BindingSource con el datatable anterior
' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' bs.DataSource = dt
With dv
.Refresh()
' coloca el registro arriba de todo .FirstDisplayedScrollingRowIndex = bs.Position
End With
bEdit = False
Catch exSql As SqlException
MsgBox(exSql.Message.ToString)
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
End Sub
' botón para guardar los cambios y llenar la grilla
Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As _System.EventArgs) Handles btn_Update.Click
Actualizar()
End Sub
' Eliminar el elemento actual del BindingSource y actualizar
Private Sub btn_delete_Click(ByVal sender As System.Object, ByVal e As _System.EventArgs) Handles btn_delete.Click
If Not bs.Current Is Nothing Then
' eliminar
bs.RemoveCurrent()
'Guardar los cambios y recargar
Actualizar()
Else
MsgBox("No hay un registro actual para eliminar", _ MsgBoxStyle.Exclamation,"Eliminar")
End If
End Sub
Private Sub Actualizar(Optional ByVal bCargar As Boolean = True)
' Actualizar y guardar cambios
If Not bs.DataSource Is Nothing Then SqlDataAdapter.Update(CType(bs.DataSource, DataTable))
If bCargar Then
cargar_registros("Select * From alumnos Order by _Apellido",DataGridView1)
End If
End If
End Sub
Private Sub btn_first_Click(ByVal sender As System.Object,ByVal e As_ System.EventArgs) Handles btn_first.Click, btn_last.Click, btn_next.Click,_ btn_Previous.Click
' Botones para moverse por los registros
' '''''''''''''''''''''''''''''''''''''''''''''
If sender Is btn_Previous Then
bs.MovePrevious()
ElseIf sender Is btn_first Then
bs.MoveFirst()
ElseIf sender Is btn_next Then
bs.MoveNext()
ElseIf sender Is btn_last Then
bs.MoveLast()
End If
End Sub
Private Sub DataGridView1_CellEndEdit(ByVal sender As Object,ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles _DataGridView1.CellEndEdit
bEdit = True
End Sub
' nuevo registro
Private Sub btn_new_Click(ByVal sender As System.Object,ByVal e As_ System.EventArgs) Handles btn_new.Click
bs.AddNew()
End Sub End Class

3 comentarios:

  1. Anotaciones:
    1. Ese codigo es de otra pagina,
    2. Has probado el codigo? no funciona eliminar

    ResponderEliminar
  2. No veo el INSERT ni UPDATE. Cómo lo hará ??
    La BD no se altera... ??? magia???
    Lo que se altera es el DataGridView.

    ResponderEliminar
  3. Tendre que decir que el codigo si funciona OK. Solo se trata de interpretar los nombres de los Botones .
    Si quiero actualizar hago el cambio en la celda o fila y luego le digo Guardar y verifico en la BD y hay estan los cambios.
    Si quiero introducir un nuevo registro : click el boton Nuevo ( Aparece una nueva fila en el DataGridView, lo lleno y hago click en el boton Guardar , verifico en la BD y hay esta.
    Si selecciono una fila o registro del DataGridView y hago Click en el Boton eliminar y verifico en la BD ya no aparece.
    Al comienzo pense que era un remedo de codigo pero no es asi. Me fue de mucha Utilidad

    ResponderEliminar