【问题标题】:How to hide a column but still access its value?如何隐藏列但仍访问其值?
【发布时间】:2025-11-26 20:20:21
【问题描述】:

我有一个gridview,有一些列。我想隐藏一列,但当我选择一条记录时仍然可以访问它的值。

有人可以帮我实现这个目标吗?

感谢任何帮助。

这是我的网格视图:OutlookID 是要隐藏的列! <asp:GridView ID="gvOutlookMeldingen" runat="server" AllowSorting="True" AutoGenerateColumns="False" AutoGenerateSelectButton="True" onselectedindexchanged="GridView_SelectedIndexChanged"> <Columns> <asp:BoundField DataField="Melder" HeaderText="Melder" /> <asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp" /> <asp:TemplateField HeaderText="Omschrijving"> <ItemTemplate> <div style="overflow:auto; width: 500px; height: 150px;"> <asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label> </div> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum" /> <asp:BoundField DataField="OutlookID" HeaderText="OutlookID" Visible="false" /> </Columns> </asp:GridView>

这是我选择记录时的代码:

Label lblOmschrijving = (Label)gvOutlookMeldingen.SelectedRow.FindControl("lblOmschrijving");
            //Label lblOutlookID = (Label)gvOutlookMeldingen.SelectedRow.FindControl("lblOutlookID");

            Response.Redirect("Detailscherm.aspx?"
                + "melder=" + Server.UrlEncode(gvOutlookMeldingen.SelectedRow.Cells[1].Text)
                + "&meldingsdatum=" + gvOutlookMeldingen.SelectedRow.Cells[4].Text
                + "&onderwerp=" + Server.UrlEncode(gvOutlookMeldingen.SelectedRow.Cells[2].Text)
                + "&outlookid=" + Server.UrlEncode(gvOutlookMeldingen.SelectedRow.Cells[5].Text)
                + "&omschrijving=" + Server.UrlEncode(lblOmschrijving.Text)
                + "&niv1=" + ""
                + "&niv2=" + "");

【问题讨论】:

  • 您可以使用 TemplateColumn 并将想要的项目的 css 属性设置为 display:none;
  • 在客户端代码或服务器端代码中访问它的值?在什么情况下?
  • @eugeneK 这不起作用,因为我仍然可以看到只有值消失的列。我无法获得价值
  • @Tassisto,“获得价值”是什么意思?你想做什么?
  • 我正在尝试 (1) 隐藏网格视图中的列。 (2)当我选择一条记录时。 (3)我将被重定向到另一个页面。 (4)我必须获取隐藏列的值 (5)并在另一个页面的文本框中显示它

标签: c# asp.net gridview


【解决方案1】:

我遇到了同样的问题。

您不能隐藏列并将值保留在后面的代码中。

您必须使用 javascript 直接在客户端隐藏它。

我做到了:

在我的 CSS 或页面上:

<style type="text/css">
.hiddencol
{
    display: none;
}
.viscol
{
    display: block;
}
</style>

然后将样式添加到gridViewer的BoundField中。

例如:

        <asp:BoundField DataField="AgentGUID" HeaderText="AgentGUID" ReadOnly="True" SortExpression="AgentGUID"
            meta:resourcekey="BoundFieldResource1">
            <HeaderStyle CssClass="hiddencol" />
            <ItemStyle CssClass="hiddencol" />
            <FooterStyle CssClass="hiddencol" />
        </asp:BoundField>

【讨论】:

    【解决方案2】:

    当我们在设计时将控件的可见性设置为 false 时,将不会呈现。尝试 在 gridView rowCreated 事件中设置可见性 =false。在我正在设置的代码下面 第二列可见性= false

    protected void grid_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Cells[2].Visible = false;

            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[2].Visible = false;
    
            }
            if (e.Row.RowType == DataControlRowType.Footer)
            {
                e.Row.Cells[2].Visible = false;
    
            }
        }
    

    现在尝试获取价值。你肯定会得到价值。

    【讨论】:

      【解决方案3】:

      您也可以在客户端将其设置为不可见。使用 Javascript。

      document.getElementById(myObject).visible = "false";
      

      【讨论】:

        【解决方案4】:

        绑定数据后设置此代码。为了获得这个功能,我这样做:

        MyGridView.Columns[0].visible = true;
        MyGridView.DataBind();
        MyGridView.Columns[0].visible = false;
        

        这样第一列就被隐藏了,但你应该能够访问它的值。

        【讨论】:

        • 它一直对我有用。也许你应该发布你的代码,这样我们就可以准确地看到你想要做什么。
        • 好的,我会从 OutlookID 列中删除 Visible="false" 标记,并且仅在 gridview 数据绑定后使用后面的代码使列不可见。
        • 就是这样,我在绑定数据之前将列的可见性设置为false。
        【解决方案5】:

        创建模板列而不是您的选择按钮。设置

        PostbackUrl=''

        。通过设计器删除列。

        【讨论】:

          【解决方案6】:

          如果您不希望数据在客户端可用,则必须设置您正在使用的 DataControlField 的服务器端 Visible = "False" 属性(最好在标记中)。您仍然可以从服务器端访问该列。

          您可能需要考虑使用 GridView 的 DataKeys 属性 - 它可能更适合您的需求。

          【讨论】:

          • 您确定在回发期间行填充正确吗?在您提供的代码处设置断点并观察gvOutlookMeldingen.RowsgvOutlookMeldingen.SelectedRow。如果您所做的只是重定向到页面并传递 QueryString 参数,为什么不将 Select 列设置为 HyperLinkField,并设置 DataNavigateUrlFields 和 DataNavigateUrlFormatString 以在 QueryString 中提供您需要的数据?