Luego de mucho luchar hemos dado con el resultado de esta interrogante que muchos de nuestros usuarios de este sitio han presentado. Si quieres compartir alguna información puedes compartir tu información.
Solución:
Intenta poner el e.Row.Cells[0].Visible = false;
dentro de RowCreated
evento de su grilla.
protected void bla_RowCreated(object sender, GridViewRowEventArgs e)
e.Row.Cells[0].Visible = false; // hides the first column
De esta manera, oculta automáticamente toda la columna.
No tienes acceso a las columnas generadas a través de grid.Columns[i]
en tu gridview DataBound
evento.
La colección Columns solo se completa cuando AutoGenerateColumns=falsey usted mismo genera manualmente las columnas.
Una buena solución para esto es llenar dinámicamente la colección Columns usted mismo, antes de establecer la propiedad DataSource y llamar a DataBind().
Tengo una función que agrega manualmente las columnas según el contenido de DataTable que quiero mostrar. Una vez que hice eso (y luego configuré DataSource y llamé a DataBind(), puedo usar la colección Columns y el valor Count es correcto, y puedo activar y desactivar la visibilidad de la columna como inicialmente quería).
static void AddColumnsToGridView(GridView gv, DataTable table)
foreach (DataColumn column in table.Columns)
BoundField field = new BoundField();
field.DataField = column.ColumnName;
field.HeaderText = column.ColumnName;
gv.Columns.Add(field);
Nota: Esta solución solo funciona si su GridView
las columnas se conocen de antemano.
Parece que estás usando un GridView
con AutoGenerateColumns=true
, que es el predeterminado. recomiendo configurar AutoGenerateColumns=false
y agregando las columnas manualmente:
Y solo incluye un BoundField
para cada campo que desee que se muestre. Esto le dará la mayor flexibilidad en términos de cómo se muestran los datos.
Si tienes algún recelo o disposición de avanzar nuestro escrito puedes añadir una explicación y con deseo lo analizaremos.