我有一个带有DataSource
(SQL数据库)的GridView 。我想隐藏一列,但是选择记录时仍然能够访问该值。有人可以告诉我该怎么做吗?
这是我要隐藏但仍要访问其值的列:
<asp:BoundField DataField="Outlook_ID" HeaderText="OutlookID" />
我尝试了所有隐藏列(property Visible="false"
)的方法,但是无法访问其值。
Answers:
如果我没有记错的话,GridView
则不保存BoundColumns
具有属性的值visible="false"
。您可以在此处执行两项操作,其中一项(如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);
}
您可以使用DataKeys检索此类字段的值,因为(如您所说)将法线设置BoundField
为可见的false时,您无法获取它们的值。
在.aspx
文件中设置GridView
属性
DataKeyNames = "Outlook_ID"
现在,在事件处理程序中,您可以像下面这样访问此键的值:
grid.DataKeys[rowIndex]["Outlook_ID"]
这将在网格的指定行索引处为您提供ID。
您可以通过编程方式执行此操作:
grid0.Columns[0].Visible = true;
grid0.DataSource = dt;
grid0.DataBind();
grid0.Columns[0].Visible = false;
这样,您可以在数据绑定之前将列设置为可见,以便生成该列。您将列设置为不可见,因此不会显示。
如果确实TemplateField
在您的列的内部,GridView
并且您有绑定到它的名为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
出现。
BoundField
并且DataField
名义上绑定。RowDataBound
事件中,我做在这种情况下一些过程。在GridView
出现之前,我这样写:
protected void GridviewLecturer_PreRender(object sender, EventArgs e)
{
GridviewLecturer.Columns[0].Visible = false;
}