2011-03-15 43 views
0

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

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

任何帮助表示赞赏。

这是我的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=" + ""); 
+2

您可以使用TemplateColumn中,并希望项目显示的设置CSS属性:无; – eugeneK 2011-03-15 14:05:51

+2

在客户端代码或服务器端代码中访问其值?在什么情况下? – David 2011-03-15 14:06:45

+0

@eugeneK这不起作用,因为我仍然可以看到只有值消失的列。并且我无法获得价值 – SamekaTV 2011-03-15 14:15:36

回答

4

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

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

有了这个第一列是隐藏的,但你应该能够访问它的价值。

+0

我已经试过了。不起作用! – SamekaTV 2011-03-15 14:25:03

+0

它总是为我工作。也许你应该发布你的代码,以便我们可以确切地看到你正在尝试做什么。 – 2011-03-15 14:27:01

+0

我编辑了我的问题。 – SamekaTV 2011-03-15 14:48:25

0

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

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

+0

我已经做到了! – SamekaTV 2011-03-15 14:26:04

+0

您确定在回发期间行是否正确填充?在你提供的代码中设置一个断点,并观看'gvOutlookMeldingen.Rows'和'gvOutlookMeldingen.SelectedRow'。 如果你正在做的是重定向到页面并传递QueryString参数,为什么不让Select列成为[HyperLinkField](http://msdn.microsoft.com/zh-cn/library/system.web.ui .webcontrols.hyperlinkfield.aspx),DataNavigateUrlFields和DataNavigateUrlFormatString设置为在QueryString中提供您需要的数据? – 2011-03-15 15:03:28

0

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

一项PostBackUrl = '<%# 的eval( “SomePage.aspx页面?ID = {0}”, “想 柱”)%>'

。通过设计师删除列。

0

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

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

当我们设置控制的可见性在设计时错误将被无法呈现。尝试到 集的可见=假在GridView控件rowCreated事件。在下面的代码我设置 第二列的知名度=假

保护无效grid_RowCreated(对象发件人,GridViewRowEventArgs E) { 如果(e.Row.RowType == DataControlRowType.DataRow) { e.Row.Cells [2]。可见= 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; 

     } 
    } 

现在尝试获取价值。确实你会得到价值。

0

我有同样的问题。

您无法隐藏该列并将代码保留在后面。

你必须用JavaScript直接在客户端隐藏它。

我这样做:

在我的CSS或页面:

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

然后添加样式到gridViewer的绑定列。

例如:

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