如何隐藏列(GridView)但仍访问其值?

Posted

技术标签:

【中文标题】如何隐藏列(GridView)但仍访问其值?【英文标题】:How to hide a column (GridView) but still access its value? 【发布时间】:2011-07-19 13:50:26 【问题描述】:

我有一个带有DataSource(SQL 数据库)的 GridView。我想隐藏一列,但在选择记录时仍然可以访问该值。有人可以告诉我怎么做吗?

这是我要隐藏但仍要访问其值的列:

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

我尝试了所有方法来隐藏该列(属性Visible="false"),但我无法访问它的值。

【问题讨论】:

【参考方案1】:
<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);

【讨论】:

请参阅netomatix.com/development/GridViewHideColumn.aspx,了解有关此解决方案的深入说明。 这个解决方案还有一个额外的优势,即数据仍然可以在客户端的 javascript 中访问。应该是这个问题的首选解决方案! 你是个传奇!【参考方案2】:

如果我没记错的话,GridView 不包含具有visible="false" 属性的BoundColumns 的值。您可以在这里做两件事,一件事(如 V4Vendetta 的回答中所述)使用Datakeys。或者您可以将您的BoundColumn 更改为TemplateField。在ItemTemplate 中,添加一个类似Label 的控件,使其可见性为false,并为Label 赋予您的价值。

【讨论】:

这会隐藏列,但不会隐藏列标题。你将如何做到这一点? 只需在您的边界域中添加 。并定义这样的 CSS 样式: .hidden display:none; 【参考方案3】:

在css中定义一个样式:

.hiddencol  display: none; 

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

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

【讨论】:

这是一个更有效的答案【参考方案4】:

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

.aspx 文件中设置GridView 属性

DataKeyNames = "Outlook_ID"

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

grid.DataKeys[rowIndex]["Outlook_ID"]

这将为您提供网格指定行索引处的 id。

【讨论】:

DataKeys 意味着什么 如果您在 html 中使用带有 CRUD 代码的 DataSource 控件,这将如何工作...?【参考方案5】:

您可以通过编程方式完成:

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

通过这种方式,您在数据绑定之前将列设置为可见,因此会生成该列。 您将列设置为不可见,因此不显示。

【讨论】:

根本不工作,当我将该代码放在 Panel PreRender 方法中时,我得到 ArrayOutOfBoundsException。 为我工作简单轻松。 这是迄今为止最好的答案。【参考方案6】:

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

如果您在访问单击的行时遇到问题,请返回。并且不要忘记提及您想参加的活动。

【讨论】:

【参考方案7】:

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

【讨论】:

这行得通。对于寻找的每个人,您需要确保标题列和网格视图列都被隐藏。【参考方案8】:

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

【讨论】:

【参考方案9】:

这里是如何获取 GridView 中设置为 Visible=False 的隐藏列的值:将本例中的数据字段 SpecialInstructions 添加到绑定的 GridView 的 DataKeyNames 属性中,并通过以下方式访问它大大地。

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

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

【讨论】:

【参考方案10】:

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

.col0

  display: none !important;

在您添加列的 aspx 文件中,您应该指定 CSS 属性:

<asp:BoundField HeaderText="Address Key" DataField="Address_Id" ItemStyle-CssClass="col0" HeaderStyle-CssClass="col0" > </asp:BoundField>

【讨论】:

【参考方案11】:

我使用了类似于user496892的方法:

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

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

hiddenField.Visible = false;

【讨论】:

【参考方案12】:

你可以在后面写代码。

Set visible= false 用于数据绑定后的列。 之后,您可以再次在网格视图中的 row_selection 函数中执行可见性“true”。它将起作用!!

【讨论】:

【参考方案13】:

我搜索了很多,但没有运气。他们中的大多数人都在处理一些错误。最后我使用了这段代码,它对我有用。 可能您应该将 1 更改为其他值。对我来说,我会隐藏第二列。

protected voidfoundedDrGridView_RowDataBound(object sender, GridViewRowEventArgs e)

    if(e.Row.RowType!=DataControlRowType.Pager)e.Row.Cells[1].Visible = false;

【讨论】:

【参考方案14】:

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

    我有一个BoundField 并通常绑定DataField。 在RowDataBound事件中,我在那个事件中做了一些处理。

    GridView 出现之前,我写了这个:

    protected void GridviewLecturer_PreRender(object sender, EventArgs e) 
    
        GridviewLecturer.Columns[0].Visible = false;
    
    

【讨论】:

以上是关于如何隐藏列(GridView)但仍访问其值?的主要内容,如果未能解决你的问题,请参考以下文章

aspxgridview如何隐藏列?急!在线等!

如何在 GridView 中隐藏 TemplateField 列

C# 关于Gridview的隐藏列问题

如何使用自动生成的列隐藏 ASP.NET GridView 中的列?

怎样隐藏DataTable中的某一列

VB.Net根据下拉文本选择隐藏特定的gridview列