lunes, 25 de mayo de 2009

Acceso a Columnas invisible en un GridView Control

Resumen:
Al mostrar los datos en un GridView siempre debe ser muy cuidadoso de no mostrar la llave primaria de la tabla en GridView. Lamentablemente todas las columnas invisibles de un DataGrid se almacena en el Viewstate, por tanto, abrió un enorme agujero de seguridad. GridView no permite al cliente ver lo invisible y la columnas no se almacenan en el objeto Viewstate. En este artículo veremos que la forma en que podemos acceder a las columnas de la invisible GridView control
Accesando a columnas invisibles.
La primera cosa que necesita hacer es establecer la propiedad DataKeyNames a la llave principal de la tabla, que en mi caso es "PersonID".

< asp:GridView ID="gvMaster" runat="server" AutoGenerateColumns="False" CellPadding="4"
DataKeyNames="PersonID" DataSourceID="mySource" ForeColor="#333333" GridLines="None" >
< FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" / >
< RowStyle BackColor="#EFF3FB" / >
< Columns >
< asp:CommandField ShowSelectButton="True" / >
< asp:BoundField DataField="PersonID" HeaderText="PersonID" InsertVisible="False"
ReadOnly="True" SortExpression="PersonID" Visible="False" / >
< asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" / >
< asp:TemplateField HeaderText="Select" >
< ItemTemplate >
< asp:CheckBox ID="CheckBox1" runat="server" / >
< /ItemTemplate >
< /asp:TemplateField >
< /Columns >
< PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" / >
< SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" / >
< HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" / >
< EditRowStyle BackColor="#2461BF" / >
< AlternatingRowStyle BackColor="White" / >
< /asp:GridView >

El GridView control consta de tres columnas (dejar fuera la columna seleccionar) PersonID, nombre y una casilla de verificación columna. PersonID columna es la llave principal y se ha marcado como invisible. También tenemos un simple control Button en el formulario web que cuando se pulsa itera a través de la GridView control y muestra las llaves principales de las columnas que han sido verificados mediante el control CheckBox.

Veamos el código de evento Click del botón:

protected void Button1_Click(object sender, EventArgs e)
{

string str = String.Empty;

int rowNo = 0;

foreach (GridViewRow row in gvMaster.Rows)

{

bool isChecked = ((CheckBox)row.FindControl("CheckBox1")).Checked;

if (isChecked)

{

// Gets the name of the primary key column our primary key is the PersonID

string primaryKey = gvMaster.DataKeyNames[0];

int personID = (int) gvMaster.DataKeys[rowNo].Value;

Response.Write(personID);

}

// increment the row count

No hay comentarios.: