如何隐藏列(GridView)但仍然可以访问它的值?

我有一个DataSource (SQL数据库)的GridView。 我想隐藏一列,但仍然能够访问我selectlogging时的值。 有人可以告诉我如何做到这一点?

这是我想要隐藏的列,仍然想要访问它的值:

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

我尝试了一切隐藏列(属性Visible="false" ),但我不能访问它的价值。

如果我没有弄错, GridView不保存具有visible="false"属性的BoundColumns的值。 你可以在这里做两件事,一件(如V4Vendetta的回答中解释的)使用数据Datakeys 。 或者你可以改变你的BoundColumn到一个TemplateField 。 在ItemTemplate ,添加一个像Label这样的控件,使其可见性为false,并将该值赋予该Label

 <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); } 

在CSS中定义样式:

 .hiddencol { display: none; } 

然后将ItemStyle-CssClass="hiddencol"HeaderStyle-CssClass="hiddencol"属性添加到网格字段中:

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

您可以使用DataKeys检索这些字段的值,因为(如您所说)当您将一个正常的BoundField设置为可见的时,您将无法获得它们的值。

.aspx文件中设置GridView属性

 DataKeyNames = "Outlook_ID" 

现在,在一个事件处理程序中,你可以像这样访问这个键的值:

 grid.DataKeys[rowIndex]["Outlook_ID"] 

这会给你在网格的指定rowindex id。

你可以通过编程来完成

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

通过这种方式,您可以在数据绑定之前将该列设置为可见,以便生成该列。 您将列设置为不可见,所以不显示。

如果在GridView的列中有一个TemplateField ,并且有一个名为blah的控件绑定到它。 然后将outlook_id作为HiddenField放置在这里:

 <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> 

现在,抓住你想要的outlook_id事件,然后访问控制行。
对于RowDataBound访问它像:

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

如果您在访问被点击的行时遇到问题,请返回。 不要忘了提及你想要访问的事件。

您可以将该列hidden在服务器端,出于某种原因,这与使用aspx代码不同。 它仍然可以被引用,就像它是可见的。 只需将此代码添加到您的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; } } 

在填充GridView之前,留下可见的列。 填充GridView ,然后隐藏列。

我使用了一个类似于user496892的方法:

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

以下是如何获取GridView中隐藏列的值设置为Visible=False :将此情况下的数据字段添加到绑定的GridView的DataKeyNames属性中,并以此方式访问它。

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

就是这样,每次都很简单。

我有一个新的解决scheme隐藏在客户端使用CSSJavaScriptjQuery的列

 .col0 { display: none; } 

并设置gvClientDetails.Columns[0].Visible = true; 如果你设置为false

你可以在后面做代码。

数据绑定后,为列Set visible= false 。 之后,你可以在网格视图的row_selection函数中再次做可见性“ 真实 ”。它将工作!

GridView出现之前,我想从GridView访问一些值。

  1. 我有一个BoundField并正常绑定DataField
  2. RowDataBound事件中,我在这个事件中做了一些处理。
  3. GridView出现之前,我写这个:

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