Actualizar Base de Datos desde un DataGrid en Modo de Edición


Esta es una continuación ami publicación anterior anterior Bloquear campos de DataGrid en Modo Edición.

Solo para ponerlos en sintonía, hice un proyecto en la escuela el cual consistía en un pequeño sistema como de inventario donde pudiera hacer los famosos CRUDS (CREATE, UPDATE DELETE, SELECT) en una base de datos MySQL.

Como mencioné en la publicación anterior, hay que agregar controles al DataGrid para poder editar los registros y después actualizar la base de datos:

  • OnRowEditing=” “
  • OnRowCancelingEdit=” “
  • OnRowUpdating=” “
<asp:GridView ID="Tabla" runat="server"
 AutoGenerateColumns="False" BackColor="White" BorderColor="#999999" BorderStyle="None"
 BorderWidth="1px" CellPadding="10" GridLines="Vertical" CellSpacing="5"
 OnRowEditing="RowEditing" OnRowCancelingEdit="RowCancelingEdit" OnRowUpdating="RowUpdating" >
 <AlternatingRowStyle BackColor="Gainsboro" />
 <Columns>
 <asp:BoundField HeaderText="Id" DataField="id" />
 <asp:BoundField HeaderText="Producto" DataField="producto" />
 <asp:BoundField HeaderText="Descripción" DataField="descripcion" />
 <asp:BoundField HeaderText="Existencia" DataField="existencia" />
 <asp:BoundField HeaderText="Precio" DataField="precio" DataFormatString="{0:c}" />
 <asp:BoundField HeaderText="Ultima Modificación" DataField="ultimaModificacion" />
 <asp:CommandField ShowEditButton="True" />
 </Columns>
 </asp:GridView>

Una vez que se hace clic en el comando de editar, los campos del registro se vuelven TextBox editables y a su vez, donde estaba el comando Editar, aparecen dos comandos: Actualizar y Cancelar.

DataGrid Editable

Al editar el registro y hacer clic en el comando de Actualizar, se dispara el método RowUpdating, el cual contiene el siguiente código:


protected void RowUpdating(object sender, GridViewUpdateEventArgs e)
 {
 conexion = new MySqlConnection(cs);
 int indice = Tabla.EditIndex = e.RowIndex;

String query = "UPDATE productos SET producto='" + ((TextBox)Tabla.Rows[indice].Cells[1].Controls[0]).Text
 + "', descripcion='" + ((TextBox)Tabla.Rows[indice].Cells[2].Controls[0]).Text
 + "', existencia='" + ((TextBox)Tabla.Rows[indice].Cells[3].Controls[0]).Text
 + "', precio='" + ((TextBox)Tabla.Rows[indice].Cells[4].Controls[0]).Text
 + "', ultimaModificacion= NOW() "
 + "WHERE id='" + ((TextBox)Tabla.Rows[indice].Cells[0].Controls[0]).Text + "'";

 MySqlCommand command = new MySqlCommand(query, conexion);

command.Connection = conexion;
 command.CommandText = query;
 conexion.Open();
 command.ExecuteNonQuery();
 conexion.Close();

Tabla.EditIndex = -1;
 loadDataToGrid();

}

Este método recibe 2 parámetros, un object que indica quien disparó el evento y un objeto de tipo GridViewUpdateEventsArgs. Primero que nada creo una conexion a la base de datos, después obtengo el índice de la fila que estaba editando, para poder acceder a cada uno de los campos y obtener su contenido. Después genero la consulta SQL con los datos de cada TextBox.
Finalmente abro la conexión  ejecuto la consulta, cierro mi conexión  termino la edición de datos con asignando el valor -1 al DataGrid en su propiedad EditIndex.
Por último llamo a mi método loadDataToGrid para llenar la tabla con los nuevos datos.

Como dato interesante, en el page load hago una validación donde verifico si es un respuesta del servidor, ya que de lo contrario el DataGrid no actualiza los datos.


protected void Page_Load(object sender, EventArgs e)
 {
 if (!IsPostBack){
 loadDataToGrid();
 }
}

Pues eso es todo, espero que les sirva !

Anuncios
Esta entrada fue publicada el 2 diciembre, 2012 a las 20:39. Se guardó como Tech y etiquetado como , , , , , , , . Añadir a marcadores el enlace permanente. Sigue todos los comentarios aquí gracias a la fuente RSS para esta entrada.

4 pensamientos en “Actualizar Base de Datos desde un DataGrid en Modo de Edición

  1. aleixen en dijo:

    Hola, yo tengo una base de datos en sql, creo que lo único que deberia cambiar es el select no?, y envez de MySqlcommand, usaria Sqlcommand, me podes decir si esoty en lo correcto? desde ya muchas gracias

    • Hola
      pues mira para serte honesto, no he trabajado con un servidor SQL, pero quiero pensar que los comandos son muy parecidos. Ademas en el Visual studio cuando creas una instancia de una clase, cada que vas a acceder a una propiedad o método de la misma te va poniendo el auto complete.
      Lamento no poder ayudarte 😦

  2. Luis solis en dijo:

    hola buenas tardes, muy buena aportación y quisiera saber si me podrían sacar de una duda, tengo un gridview en ASP.net en el cual tengo como readonly 3 campos de mi GridView. Cuando actualizo cualquier fila, se me borran 2 de los 3 campos que tengo en ReadOnly en mi grid y en la tabla de mi base de datos, un campo es la Primary Key, ese no se borra , pero los otros 2 si. Utilizó un Data Set para llenar el gridview y utilizó los métodos de INSERT,UPDATE y DELETE que se tienen por default en la ventana de configuración del data set. ¿qué estará pasando?

    • Hola Luis
      Oye me da gusto que te haya servido la publicación.
      Honestamente tiene como 4 años que no toco nada de .NET
      Yo creo que lo mejor sería que buscaras en stackoverflow.
      Saludos 😀

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: