C# 如何隐藏列(GridView)但仍访问其值?
我有一个带有C# 如何隐藏列(GridView)但仍访问其值?,c#,asp.net,gridview,hide,C#,Asp.net,Gridview,Hide,我有一个带有数据源(SQL数据库)的GridView。我想隐藏一列,但在选择记录时仍然能够访问该值。有人能告诉我怎么做吗 这是我要隐藏但仍要访问其值的列: <asp:BoundField DataField="Outlook_ID" HeaderText="OutlookID" /> 我尝试了所有方法来隐藏列(属性Visible=“false”),但是我无法访问它的值。您可以使用DataKeys来检索这些字段的值,因为(正如您所说)当您将普通边界字段设置为Visible fal
数据源(SQL数据库)的GridView。我想隐藏一列,但在选择记录时仍然能够访问该值。有人能告诉我怎么做吗
这是我要隐藏但仍要访问其值的列:
<asp:BoundField DataField="Outlook_ID" HeaderText="OutlookID" />
我尝试了所有方法来隐藏列(属性Visible=“false”
),但是我无法访问它的值。您可以使用DataKeys来检索这些字段的值,因为(正如您所说)当您将普通边界字段设置为Visible false时,您无法获取它们的值
在.aspx
文件中设置GridView
属性
DataKeyNames = "Outlook_ID"
现在,在事件处理程序中,您可以访问此键的值,如下所示:
grid.DataKeys[rowIndex]["Outlook_ID"]
这将为您提供网格指定行索引处的id。如果我没有弄错的话,GridView
不包含属性为visible=“false”
的BoundColumns
的值。在这里,您可以做两件事,一件(如V4Vendetta的回答中所述)使用Datakeys
。或者您可以将BoundColumn
更改为TemplateField
。在ItemTemplate
中,添加类似Label
的控件,使其可见性为false,并为该标签提供值 如果在GridView
的列中确实有一个TemplateField
,并且绑定了一个名为blah的控件。然后将outlook\u 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>
如果访问单击的行时遇到问题,请务必返回。不要忘了提及您希望访问的事件。在填充网格视图之前,请留下可见的列。填充网格视图
,然后隐藏列。您可以通过编程方式执行此操作:
grid0.Columns[0].Visible = true;
grid0.DataSource = dt;
grid0.DataBind();
grid0.Columns[0].Visible = false;
通过这种方式,可以在数据绑定之前将列设置为可见,从而生成该列。
您将列设置为不可见,因此它不会显示。您可以在服务器端将列隐藏,由于某些原因,这与使用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隐藏列值
希登科尔先生
{
显示:无;
}
ArrayList EmailList=新建ArrayList();
foreach(gvEmployeeDetails.Rows中的GridViewRow itemrow)
{
EmailList.Add(itemrow.Cells[YourIndex].Text);
}
我使用了一种类似于user496892的方法:
SPBoundField hiddenField = new SPBoundField();
hiddenField.HeaderText = "Header";
hiddenField.DataField = "DataFieldName";
grid.Columns.Add(hiddenField);
grid.DataSource = myDataSource;
grid.DataBind();
hiddenField.Visible = false;
在css中定义样式:
.hiddencol { display: none; }
然后将ItemStyle CssClass=“hiddencol”
和HeaderStyle CssClass=“hiddencol”
属性添加到网格字段:
<asp:BoundField DataField="ID" HeaderText="ID" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" ClientIDMode="Static" />
我有一个新的解决方案,使用css或javascript或jquery在客户端隐藏列
.col0
{
display: none;
}
在添加列的aspx文件中,应指定CSS属性:
<asp:BoundField HeaderText="Address Key" DataField="Address_Id" ItemStyle-CssClass="col0" HeaderStyle-CssClass="col0" > </asp:BoundField>
以下是如何获取网格视图中设置为Visible=False
的隐藏列的值:将本例中的数据字段SpecialInstructions
添加到绑定网格视图的DataKeyNames属性中,并以这种方式访问它
txtSpcInst.Text = GridView2.DataKeys(GridView2.SelectedIndex).Values("SpecialInstructions")
就是这样,每次都很简单。你可以用代码完成
数据绑定后的列的Set visible=false
。
之后,您可以从网格视图中再次在行选择中执行可见性“true”功能。它将起作用 当我想在出现GridView
之前从GridView
访问某个值时
我通常有一个BoundField
和绑定DataField
在RowDataBound
事件中,我在该事件中执行一些处理
在出现GridView
之前,我写了以下内容:
protected void GridviewLecturer_PreRender(object sender, EventArgs e)
{
GridviewLecturer.Columns[0].Visible = false;
}
有关此解决方案的详细说明,请参阅。此解决方案的另一个优点是,数据仍然可以在客户端通过javascript访问。应该是这个问题的首选解决方案!你是一个传奇!根本不起作用,当我将代码放入面板预渲染方法中时,我得到ArrayOutOfBoundsException。这对我来说简单易行。这是迄今为止最好的答案。这会隐藏列,但不会隐藏列标题。你要怎么做?只需添加你的边界字段。并定义如下css样式:.hidden{display:none;}这很有效。对于每个正在查看的人,您需要确保标题列和网格视图列都是隐藏的。DataKeys用于此目的的位置如果您在HTML中使用带有CRUD代码的数据源控件,这将如何工作…?这是一个更有效的答案
txtSpcInst.Text = GridView2.DataKeys(GridView2.SelectedIndex).Values("SpecialInstructions")
protected void GridviewLecturer_PreRender(object sender, EventArgs e)
{
GridviewLecturer.Columns[0].Visible = false;
}