2011-03-21 99 views
60

我有一个GridView与DataSource(SQL数据库)。我想隐藏一列,但仍然可以在选择记录时访问该值。有人可以告诉我如何做到这一点?如何隐藏列(GridView)但仍然可以访问它的值?

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

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

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

回答

40

如果我没有弄错,GridView不包含BoundColumns的值visible="false"的值。你可以在这里做两件事,一件(如V4Vendetta的回答中解释的)使用Datakeys。或者您可以将您的BoundColumn更改为TemplateField。并且在ItemTemplate中,添加一个像Label这样的控件,使其可见性为false,并为您的值Label

+6

这隐藏了列但它不隐藏列标题。你会怎么做? – Apollo 2013-07-29 16:28:37

28

您可以使用DataKeys来检索这些字段的值,因为(如您所说)当您将普通BoundField设置为可见false时,您无法获取其值。

.aspx文件中设置的GridView属性现在

DataKeyNames = "Outlook_ID" 

,在事件处理程序,您可以访问该键的值,像这样:

grid.DataKeys[rowIndex]["Outlook_ID"] 

这会给你的ID网格的指定rowindex。

+1

DataKeys其中用于那些 – 2016-11-01 13:09:45

+0

这将如何工作,如果你使用DataSource控件与在HTML代码CRUD ...? – 2017-05-06 07:59:54

10

如果在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; 

做得到回来,如果你有麻烦访问点击一行。不要忘记提及您想要访问的事件。

4

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

20

可以通过编程方式做到这一点:

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

这样您绑定之前列设置为可见,从而产生列。 您将列设置为不可见,因此不显示。

+1

根本不工作,当我将该代码放置在Panel PreRender方法中时,出现ArrayOutOfBoundsException。 – Chexpir 2013-02-18 11:19:16

+1

无法正常工作ArrayOutOfBoundsException – 2014-01-06 09:23:16

+2

为我工作简单而容易。 – RustyH 2014-05-29 20:58:41

8

您可以在服务器端创建列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; 
    } 
} 
+0

这工作。对于每个看起来需要确保标题列和网格视图列都隐藏的人。 – Danrex 2016-06-01 03:12:51

69
<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); 
} 
+0

有关此解决方案的深入说明,请参见http://www.netomatix.com/development/GridViewHideColumn.aspx。 – Marcel 2012-09-03 08:05:34

+2

该解决方案还具有额外的优势,即数据仍可在客户端的JavaScript中访问。应该是这个问题的首选解决方案! – 2016-11-11 06:16:11

1

我采用类似于user496892的方法:

SPBoundField hiddenField = new SPBoundField(); 
hiddenField.HeaderText = "Header"; 
hiddenField.DataField = "DataFieldName"; 
grid.Columns.Add(hiddenField); 

grid.DataSource = myDataSource; 
grid.DataBind(); 

hiddenField.Visible = false; 
33

定义风格在CSS:

.hiddencol { display: none; } 

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

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

这是一个更有效的答案 – ImCrimson 2017-04-17 14:53:22

1

我有一个新的解决方案隐藏使用CSS的javascript的jquery客户端的列。

.col0 
{ 
    display: none; 
} 

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

1

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

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

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

0

你可以在后面执行代码。

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

0

当我想在GridView出现之前从GridView访问某个值。

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

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