如何隐藏列(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隐藏在客户端使用CSS或JavaScript或jQuery的列 。
.col0 { display: none; }
并设置gvClientDetails.Columns[0].Visible = true;
如果你设置为false
。
你可以在后面做代码。
数据绑定后,为列Set visible= false
。 之后,你可以在网格视图的row_selection函数中再次做可见性“ 真实 ”。它将工作!
在GridView
出现之前,我想从GridView
访问一些值。
- 我有一个
BoundField
并正常绑定DataField
。 - 在
RowDataBound
事件中,我在这个事件中做了一些处理。 -
在
GridView
出现之前,我写这个:protected void GridviewLecturer_PreRender(object sender, EventArgs e) { GridviewLecturer.Columns[0].Visible = false; }