Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何隐藏列(GridView)但仍访问其值?_C#_Asp.net_Gridview_Hide - Fatal编程技术网

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

我有一个新的解决方案,使用cssjavascriptjquery在客户端隐藏列

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