Ocultar columnas de gridview ASP.Net
Las tablas GridView de ASP.Net permite ocultar las columnas desde el servidor mediante C# a partir de la propiedad OnRowDataBound.
La propiedad OnRowDataBound permite editar desde el servidor los valores y estructura de un GridView en tiempo de ejecución.
Ocultar columnas del GridView
Partiendo de un gridview ya cargado en una aplicación web de asp o puedes crear un nuevo proyecto y agrega un grid con algunas filas. En mi caso utilizare la siguiente tabla con 3 columnas y algunas filas de datos.
Podría interesarte Modificar contenido de GridView en tiempo de ejecución en ASP.Net C#
Primero debemos de agregar al código del control del GridView la propiedad OnRowDataBound, el código quedaría de la siguiente manera.
<asp:GridView ID="gvTablaUno" runat="server" AutoGenerateColumns="false" OnRowDataBound="gvTablaUno_RowDataBound">
<Columns>
<asp:BoundField DataField="id" HeaderText="Num." />
<asp:BoundField DataField="Nombre" HeaderText="Nombre completo" />
<asp:BoundField DataField="Telefono" HeaderText="Telefono" />
</Columns>
</asp:GridView>
El valor de la propiedad que agregamos se genera automáticamente y al mismo tiempo se crea en el código C#.
En la clase C# de la página aspx se crea un método de nombre gvTablaUno_RowDataBound, será en lo que en seguida trabajaremos.
Por último, debemos de agregar el código necesario en el método creado automáticamente en el paso anterior, en mi caso es la siguiente.
protected void gvTablaUno_RowDataBound(object sender, GridViewRowEventArgs e)
{
}
Dentro de este método colocaremos el código siguiente para ocultar la columna completa del gridview.
protected void gvTablaUno_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
e.Row.Cells[0].Visible = false;
}
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[0].Visible = false;
}
}
- Un gridview se divide en dos secciones, el encabezado (DataControlRowType.Header) y las filas (DataControlRowType.DataRow).
- Definimos la posición de la celda (comienza en 0), mediante la propiedad Visible con valor False ocultamos la celda.
El proceso ocultar las celdas es el mismo tanto en el encabezado como en las filas. Como buena práctica se hace un filtro para las acciones en el encabezado y para las propias de las filas.
Podría interesarte Evento RowCommand de gridview ASP.Net
El resultado al ejecutar la página es la siguiente.
Toda la primera columna (Num.) desaparece, ya que esta está en la posición 0; puedes ocultar cualquier otra columna mediante la posición.
Gerardo como estas, cordial saludo, muchas gracias por tu explicación, yo estoy tratando de ocultar también una columna de un GridView pero es de un checkbox, el codigo que tengo es el siguiente:
y este es el metodo:
protected void ChkSelecAll_CheckedChanged(object sender, EventArgs e) {
Producto P;
P = new Producto();
if (P.NombreProducto == “Compra Cartera Libraza Sin Responsabilidad”)
{
CheckBox selectAll;
CheckBox selectIndividual;
selectAll = (CheckBox)GrvRegistrosRevisar.HeaderRow.FindControl(“ChkSelecAll”);
foreach (GridViewRow item in GrvRegistrosRevisar.Rows) {
selectIndividual = (CheckBox)item.FindControl(“ChkSelectIndividual”);
selectIndividual.Checked = selectAll.Checked;
}
}
else {
//Deshabilitar Seleccionar Todo Checkbox si producto es diferente a compra de cartera
}
Con este método lo que quiere es darle al usuario la opción de seleccionar todo y no lo tenga que hacer uno por uno, por medio del checkbox de selectAll
En ese GridView se cargan los datos de varios tipos de producto pero lo que necesito es que se oculte la columna del checkbox para un producto determinado, intenté realizarlo con el mismo código que explicaste pero no me funciona, te agradeceria me pudieras ayudar ya que soy nuevo manejando .net y he investigado mucho pero no he podido encontrar la solución, Gracias y saludos.
Hola que tal.
Estas colocando un check en el encabezado del grid y al seleccionar ese check marcar todos los check de los registros?
o solo quieres que aparezca el check en el encabezado?
Hola, Estoy colocando un check en el encabezado del grid y al seleccionar ese check marcar todos los check de los registros, este es el codigo del grid:
Puedes colocar tu codigo C# como el siguiente para seleccionar los demas check:
protected void ChkSelecAll_CheckedChanged(object sender, EventArgs e) {
Producto P;
P = new Producto();
if (P.NombreProducto == “Compra Cartera Libraza Sin Responsabilidad”)
{
CheckBox selectIndividual;
foreach (GridViewRow item in GrvRegistrosRevisar.Rows)
{
selectIndividual = (CheckBox)grvRow.FindControl(“ChkSelectIndividual”);
selectIndividual.Checked = true;
}
}
else {
//Deshabilitar Seleccionar Todo Checkbox si producto es diferente a compra de cartera
}
}
Solo ten en cuenta que al hacer postback se refresca nuevamente la pagina, por lo tanto, tienes que validar el postback como lo indico en este tema:
Checkbox seleccionados