Editando registros de un GridView utilizando un DataTable

Ahora lo que vamos a hacer es tener la posibilidad de editar los usuarios que vayamos agregando a nuestro catálogo.

La primera cosa que vamos a hacer es agregar una columna que nos permita editar los registros, para ello agregaremos un campo tipo Edit, Cancel, Update.

Una vez agregada, en la parte izquierda de nuestro listado nos aparecerá una columna con la leyenda Editar.

Para comenzar a editar nuestros registros necesitamos agregar el siguiente código.

VB.NET

Private Sub dgvListado_RowEditing(...) Handles dgvListado.RowEditing
'Le indicamos que fila es la que vamos a editar
dgvListado.EditIndex = e.NewEditIndex

'Desplegamos la información
Call Desplegar()
End Sub

Private Sub Desplegar()
'Leemos el dataTable
Dim DT As DataTable = Session("DT")

'Asignamos el DT al gridview
dgvListado.DataSource = DT
dgvListado.DataBind()
End Sub

C#

protected void dgvListado_RowEditing(object sender, GridViewEditEventArgs e)
{
//Le indicamos que fila es la que vamos a editar
dgvListado.EditIndex = e.NewEditIndex;

//Desplegamos la información
Desplegar();
}

private void Desplegar()
{
//Leemos el datatable
DataTable DT = new DataTable();
DT = (DataTable)Session["DT"];

//Asignamos el DT al GridView
dgvListado.DataSource = DT;
dgvListado.DataBind();
}

Además, para el caso de C# agregamos la siguiente línea en la sección Source de nuestra pantalla de diseño
OnRowEditing="dgvListado_RowEditing"

Este código lo único que nos va a hacer es prepararnos los registros para editar, aún nos falta agregar las sentencias necesarias para actualizar el registros.

Antes de llegar a este punto vamos a hacer un cambio, vamos a quitar la posibilidad de que puedan editar la clave del usuario, en otras palabras vamos a permitir que únicamente modifiquen el nombre y el teléfono de los usuarios.

A nuestro gridView le diremos que no permita modificar la clave de la siguiente manera:

DataKeyNames="Clave"

Entonces, al presionar el boton Editar nos aparecerán las opciones Actualizar y Cancelar además de habilitar los campos Nombre y Teléfono para editar nuestros registros.

Para actualizar nuestros registros, requerimos de las siguientes lineas:

VB.NET

Private Sub dgvListado_RowUpdating(...) Handles dgvListado.RowUpdating

'Leemos los datos ingresados
Dim strNombre As String = CType(dgvListado.Rows(e.RowIndex).Cells(2).Controls(0), TextBox).Text
Dim strTelefono As String = CType(dgvListado.Rows(e.RowIndex).Cells(3).Controls(0), TextBox).Text

'Actualizamos el DataTable
Dim DT As DataTable = Session("DT")
DT.Rows(e.RowIndex).Item("Nombre") = strNombre
DT.Rows(e.RowIndex).Item("Telefono") = strTelefono

'Le indicamos al grid que queremos eliminar la opcion de editar
dgvListado.EditIndex = -1

'Desplegamos la información
Call Desplegar()
End Sub

C#
protected void dgvListado_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//Leemos los datos ingresados
string strNombre = ((TextBox) dgvListado.Rows[e.RowIndex].Cells[2].Controls[0]).Text;
string strTelefono=((TextBox) dgvListado.Rows[e.RowIndex].Cells[3].Controls[0]).Text;

//Actualizamos el DataTable
DataTable DT = new DataTable();
DT=(DataTable)Session["DT"];
DT.Rows[e.RowIndex]["Nombre"] = strNombre;
DT.Rows[e.RowIndex]["Telefono"] = strTelefono;

//Le indicamos al grid que queremos quitar la opción de editar
dgvListado.EditIndex = -1;

//Desplegamos la información
Desplegar();
}

Además, agregamos esta línea a nuestro GridView
OnRowUpdating="dgvListado_RowUpdating"

Por último, también requerimos del siguiente código para la opción de Cancelar.

VB.NET

Private Sub dgvListado_RowCancelingEdit(...) Handles dgvListado.RowCancelingEdit
'Le indicamos al grid que queremos eliminar la opcion de editar
dgvListado.EditIndex = -1

'Desplegamos la información
Call Desplegar()
End Sub

C#
protected void dgvListado_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
//Le indicamos al grid que queremos quitar la opción de editar
dgvListado.EditIndex = -1;

//Desplegamos la información
Desplegar();
}

Dudas ó comentarios son bienvenidos....

ne....

Comentarios

  1. no actualiza, solo la hace si vuelvo a llamar al edit ahi se actualiza...

    ResponderEliminar
    Respuestas
    1. Probablemente te esta faltando volver a llamar la función Desplegar(), ya que, en base a lo que comentas, si esta actualizando correctamente el DataTable
      Saludos,

      Eliminar

Publicar un comentario

Entradas populares de este blog

Agregar registros a un GridView utilizando un DataTable

Validar registros de un DataTable

Agregar imágenes a los CommandFields