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

时间:2011-03-21 10:21:36

标签: c# asp.net gridview hide

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

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

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

我尝试了隐藏列(属性Visible="false")的所有内容,但我无法访问其值。

13 个答案:

答案 0 :(得分:77)

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

答案 1 :(得分:44)

如果我没有弄错的话,GridView不会保留BoundColumns具有属性visible="false"的值。你可以在这里做两件事,一件事(如V4Vendetta的答案中所解释的)使用Datakeys。或者,您可以将BoundColumn更改为TemplateField。在ItemTemplate中,添加Label之类的控件,将其可见性设为false,并将其值赋予Label

答案 2 :(得分:39)

在css中定义样式:

.hiddencol { display: none; }

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

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

答案 3 :(得分:31)

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

.aspx文件中设置GridView属性

DataKeyNames = "Outlook_ID"

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

grid.DataKeys[rowIndex]["Outlook_ID"]

这将在网格的指定rowindex处为您提供id。

答案 4 :(得分:20)

您可以通过编程方式执行此操作:

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

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

答案 5 :(得分:10)

如果你的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;

如果您在访问点击的行时遇到问题,请回来。并且不要忘记提及您想要访问的事件。

答案 6 :(得分: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;
    }
}

答案 7 :(得分:4)

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

答案 8 :(得分:2)

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

.col0
{
  display: none;
}

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

答案 9 :(得分:2)

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

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

这就是它,每次都非常简单。

答案 10 :(得分:1)

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

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

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

hiddenField.Visible = false;

答案 11 :(得分:0)

你可以在后面编写代码。

对于数据绑定后的列,

Set visible= false。 之后,您可以再次从网格视图中的 row_selection 功能中查看“ true ”。它会工作!!

答案 12 :(得分:0)

如果我想在显示GridView之前访问GridView的某些值。

  1. 我有一个BoundField并正常绑定DataField
  2. RowDataBound事件中,我会在该事件中执行某些操作。
  3. 出现GridView之前,我写了这个:

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