UNIDAD 5: INTRODUCION A LAS BASES DE DATOS

TEMA 13: EDICION DE REGISTROS SQL UPDATE J#

Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva informacion o para corregir algun error de captura original o para agregar alguna columna que no existia por modificacion de la tabla o la base de datos.

En general se tiene otro problema de sql UPDATE, sin embargo ahora se aprovechan algunos elementos nuevos del objeto datagrid, como son la capacidad que tiene de crearle columnas de edicion a los renglones que muestra el dataset, estas columnas de edicion traen sus propios metodos, mismos que se pueden cargar con codigo para procesar.

Prog32.aspx

<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script language="VJ#" runat="server">
OleDbConnection coneccion =
new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\progfacil\\lauro\\mibase.mdb");
void Page_Load(Object sender, EventArgs e)
{
// solo para cuando se carga por primera vez la forma
if ( !get_IsPostBack() ) DespTabla();
}
public void DespTabla()
{
OleDbDataAdapter canal=new OleDbDataAdapter("select * from mitabla", coneccion);
DataSet tabla= new DataSet();
canal.Fill(tabla, "mitabla");
TABLAGRID.set_DataSource(tabla);
TABLAGRID.set_DataMember("mitabla");
TABLAGRID.DataBind();
}
public void DataGrid_Edit(Object sender, DataGridCommandEventArgs e)
{
// cargando el renglon donde se pidio la edicion
// con la nueva forma que incluye una columna de update y de cancel
TABLAGRID.set_EditItemIndex((int)e.get_Item().get_ItemIndex());
DespTabla();
}
public void DataGrid_Cancel(Object sender, DataGridCommandEventArgs e)
{
// para cancelar solo poner edititemindex en -1 (ningun renglon)
TABLAGRID.set_EditItemIndex(-1);
DespTabla();
}
public void DataGrid_Update(Object sender, DataGridCommandEventArgs e)
{
String q = "UPDATE mitabla SET clave= @CLAVE, nombre= @NOMBRE, edad = @EDAD where clave= @CLAVE";
OleDbCommand orden = new OleDbCommand(q, coneccion);
orden.get_Parameters().Add(new OleDbParameter("@CLAVE", OleDbType.Integer));
orden.get_Parameters().Add(new OleDbParameter("@NOMBRE", OleDbType.VarWChar, 20));
orden.get_Parameters().Add(new OleDbParameter("@EDAD", OleDbType.Integer));
// cargando textbox de clave con el valor de la clave
orden.get_Parameters().get_Item("@CLAVE").set_Value( TABLAGRID.get_DataKeys().get_Item( (int)e.get_Item().get_ItemIndex() ) ) ;
// creando y cargando los demas textboxs
String[] nomcajas = {"@CLAVE","@NOMBRE","@EDAD"};
for(int i=2; i <= 3; i++)
{
String datocajas =((TextBox)e.get_Item().get_Controls().get_Item(i).get_Controls().get_Item(0)).get_Text();
orden.get_Parameters().get_Item(nomcajas[i-1]).set_Value(get_Server().HtmlEncode(datocajas));
};
orden.get_Connection().Open();
orden.ExecuteNonQuery();
// poniendo otra vez el datagrid en nada
TABLAGRID.set_EditItemIndex(-1);
orden.get_Connection().Close();
DespTabla();
}
</script>
<body style="font: 10pt verdana">
<form runat="server">
<h3><font face="Verdana">EDICION O ACTUALIZACION DE REGISTROS</font></h3>
<span id="Message" EnableViewState="false" style="font: arial 11pt;" runat="server"/><p>
<ASP:DataGrid id="TABLAGRID" runat="server"
Width="400"
BackColor="#ccccff"
BorderColor="black"
ShowFooter="false"
CellPadding=3
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#aaaadd"
OnEditCommand="DataGrid_Edit"
OnCancelCommand="DataGrid_Cancel"
OnUpdateCommand="DataGrid_Update"
DataKeyField="clave"
<Columns>
<asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update" ItemStyle-Wrap="false"/>
</Columns>
</ASP:DataGrid>
</form>
</body>

Para entender el codigo veamos la corrida completa:

Pantalla uno prog32.aspx :

image276.jpg

Observar que ahora el datagrid incluye una columna de edicion especial, revisar la parte del codigo de propiedades del datagrid en el programa y las nuevas propiedades que se le agregaron.

Pantalla dos prog32.aspx:

image277.jpg

Observar que la columna de edicion del renglon seleccionado (click en edit de cualquier renglon) ahora tiene dos opciones(update y cancel) y el renglon de edicion se convirtio en puros textbox (ya se modificaron algunos valores), update y cancel tienen su propio codigo en el programa, revisarlo y usando opcion update se tiene ahora;

Pantalla tres prog32.aspx

image278.jpg

Un registro editado o modificado, analizar con cuidado el codigo del programa, que esta documentado.

NOTAS:

Primero se observa que DATAGRID como todo buen objetos tiene sus propios eventos como son ONEDIT, ONCANCEL, ONUPDATE (mas algunos otros que les toca investigas a ustedes).

Lo que se hizo fue cargar cada uno de esos eventos con los metodos apropiados.

Cuando el programa se ejecuto por primra vez, se leyo la base de datos y se desplego de manera normal, excepto que ahora aparece una columna extra cargada con puros edit's.

Cuando el usuario selecciona un renglon para edicion(con un click en la la palabra-liga EDIT del renglon ) se activa el codigo del metodo “public void DataGrid_Edit” aqui lo unico que se hace es recojer el numero de renglon a editar (que esta en el objeto itemindex) y desplegar la tabla, este metodo crea la nueva columna con los mensajes-ligas update y cancel ademas de incluir un textbox para cada columna de el renglon.

Primero veremos el metodo “public void DataGrid_Cancel” el codigo es sencillo solo poner itemindex en -1, practicamente se le esta diciendo al servidor que es el renglon -1 de la tabla el que se va a editar y como todos mis estudiosos alumnos recuerdan ninguna tabla tiene rengon -1, por tanto el servidor manda el despliegue normal de renglon con la columna edit.

Segundo el metodo mas importante del programa es “public void DataGrid_Update” que es basicamente un SQL UPADATE y como se va a usar un objeto command, solo hay que mandarle los parametros tipodato y value apropiados por cada textbox del renglon.

Lo unico raro dentro de este codigo es:

La clave del renglon se obtuvo directamente del DATAGRID que incluye la propiedad DATAKEY.

Ademas se uso un arreglo de strings para guardar los nombres de las columnas de la tabla ya que el servidor cuando los manda al usuario les pone su propio nombre y no necesariamente el que se les puso en access.

Tambien se uso una string datocajas para cargarla con el dato que contiene el textbox.

El ciclo se construyo considerando que ahora el dataset contiene como columna (0) cero la columna de edits, o cancel-update.

PROBLEMAS PROGRAMACION J# NET SUGERIDOS

1.- construir aspx's de edicion para sus tablas y bases de datos

Politica de Privacidad