valor tiempo ocultar oculta obtener net eliminar ejecucion columns columna celda asp c# asp.net gridview hide

c# - obtener - ocultar columna gridview en tiempo de ejecucion



¿Cómo ocultar una columna(GridView) pero aún acceder a su valor? (13)

Tengo un GridView con un DataSource (base de datos SQL). Quiero ocultar una columna, pero aún así poder acceder al valor cuando selecciono el registro. ¿Puede alguien mostrarme cómo hacer esto?

Esta es la columna que quiero ocultar y aún quiero acceder a su valor:

<asp:BoundField DataField="Outlook_ID" HeaderText="OutlookID" />

Intenté todo para ocultar la columna (propiedad Visible="false" ), pero no puedo acceder a su valor.


Aquí se muestra cómo obtener el valor de una columna oculta en un GridView que se establece en Visible=False : agregue el campo de datos en este caso SpecialInstructions a la propiedad DataKeyNames del GridView encuadernado, y acceda de esta manera.

txtSpcInst.Text = GridView2.DataKeys(GridView2.SelectedIndex).Values("SpecialInstructions")

Eso es todo, funciona todo el tiempo muy simple.


Cuando quiero acceder a algún valor de GridView antes de que aparezca GridView .

  1. Tengo un BoundField y unir DataField nomalmente.
  2. En el evento RowDataBound , realizo algún proceso en ese evento.
  3. Antes de que apareciera GridView escribo esto:

    protected void GridviewLecturer_PreRender(object sender, EventArgs e) { GridviewLecturer.Columns[0].Visible = false; }


Definir un estilo en css:

.hiddencol { display: none; }

A continuación, agregue el ItemStyle-CssClass="hiddencol" y el HeaderStyle-CssClass="hiddencol" al campo de la cuadrícula:

<asp:BoundField DataField="ID" HeaderText="ID" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" ClientIDMode="Static" />


Deje columnas visibles antes de llenar GridView . Complete el GridView y luego oculte las columnas.


Puede hacer que la columna esté hidden en el lado del servidor y, por alguna razón, esto es diferente a hacerlo con el código aspx . Todavía se puede hacer referencia como si fuera visible. Simplemente agregue este código a su evento OnDataBound .

protected void gvSearchResults_DataBound(object sender, EventArgs e) { GridView gridView = (GridView)sender; if (gridView.HeaderRow != null && gridView.HeaderRow.Cells.Count > 0) { gridView.HeaderRow.Cells[UserIdColumnIndex].Visible = false; } foreach (GridViewRow row in gvSearchResults.Rows) { row.Cells[UserIdColumnIndex].Visible = false; } }


Puedes hacerlo código detrás.

Set visible= false para las columnas después del enlace de datos. Después de eso, nuevamente puede hacer que la visibilidad sea " verdadera " en la función row_selection desde la vista de cuadrícula. ¡ Funcionará!


Puedes hacerlo programáticamente:

grid0.Columns[0].Visible = true; grid0.DataSource = dt; grid0.DataBind(); grid0.Columns[0].Visible = false;

De esta forma, configura la columna como visible antes del enlace de datos, por lo que se genera la columna. Establece la columna como no visible, por lo que no se muestra.


Si no me equivoco, GridView no contiene los valores de BoundColumns que tienen el atributo visible="false" . Dos cosas que puede hacer aquí, una (como se explica en la respuesta de V4Vendetta) para utilizar Datakeys . O puede cambiar su BoundColumn a TemplateField . Y en ItemTemplate , agregue un control como Label , haga que su visibilidad sea falsa y dé su valor a esa Label .


Si tiene un TemplateField dentro de las columnas de su GridView y tiene, digamos, un control llamado blah vinculado a él. Luego coloque el outlook_id como un HiddenField allí así:

<asp:TemplateField HeaderText="OutlookID"> <ItemTemplate> <asp:Label ID="blah" runat="server">Existing Control</asp:Label> <asp:HiddenField ID="HiddenOutlookID" runat="server" Value=''<%#Eval("Outlook_ID") %>''/> </ItemTemplate> </asp:TemplateField>

Ahora, tome la fila en caso de que quiera el outlook_id y luego acceda al control.
Para RowDataBound accede como:

string outlookid = ((HiddenField)e.Row.FindControl("HiddenOutlookID")).Value;

Regrese, si tiene problemas para acceder a la fila cliqueada. Y no olvide mencionar el evento al que desea acceder.


Tengo una nueva solución ocultar la columna en el lado del cliente usando css o javascript o jquery .

.col0 { display: none; }

Y establezca gvClientDetails.Columns[0].Visible = true; , Si configura a false .


Usé un método similar al user496892:

SPBoundField hiddenField = new SPBoundField(); hiddenField.HeaderText = "Header"; hiddenField.DataField = "DataFieldName"; grid.Columns.Add(hiddenField); grid.DataSource = myDataSource; grid.DataBind(); hiddenField.Visible = false;


Puede utilizar DataKeys para recuperar el valor de dichos campos, porque (como dijo) cuando establece un BoundField normal como visible falso, no puede obtener su valor.

En el archivo .aspx , establezca la propiedad GridView

DataKeyNames = "Outlook_ID"

Ahora, en un controlador de eventos, puede acceder al valor de esta clave de la siguiente manera:

grid.DataKeys[rowIndex]["Outlook_ID"]

Esto le dará la identificación en el rowindex especificado de la grilla.


<head runat="server"> <title>Accessing GridView Hidden Column value </title> <style type="text/css"> .hiddencol { display: none; } </style> <asp:BoundField HeaderText="Email ID" DataField="EmailId" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" > </asp:BoundField> ArrayList EmailList = new ArrayList(); foreach (GridViewRow itemrow in gvEmployeeDetails.Rows) { EmailList.Add(itemrow.Cells[YourIndex].Text); }