如何隐藏GridView中的TemplateField列

Hom*_*mam 37 .net asp.net data-binding gridview exception-handling

如何在GridView中隐藏TemplateField列?

我尝试了以下方法:

<asp:TemplateField ShowHeader="False" Visible='<%# MyBoolProperty %>' >
<ItemTemplate>
    <asp:LinkButton ID="attachmentButton" runat="server" ... />
</ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

但它不起作用,并给出以下错误:

仅在具有DataBinding事件的对象上支持数据绑定表达式.System.Web.UI.WebControls.TemplateField没有DataBinding事件.

我也尝试以编程方式隐藏它,但似乎不可能通过名称获取列,因为没有TemplateField列的名称.

nav*_*een 55

protected void OnRowCreated(object sender, GridViewRowEventArgs e)
{
         e.Row.Cells[columnIndex].Visible = false;
}
Run Code Online (Sandbox Code Playgroud)


如果您不喜欢硬编码索引,我建议的唯一解决方法是提供一个HeaderTextfor GridViewColumn,然后使用它找到列HeaderText.

protected void UsersGrid_RowCreated(object sender, GridViewRowEventArgs e)
{
    ((DataControlField)UsersGrid.Columns
            .Cast<DataControlField>()
            .Where(fld => fld.HeaderText == "Email")
            .SingleOrDefault()).Visible = false;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但我想知道如何获得它的索引,我不喜欢硬编码索引. (4认同)

Dee*_*hra 9

For Each dcfColumn As DataControlField In gvGridview.Columns
    If dcfColumn.HeaderText = "ColumnHeaderText" Then
        dcfColumn.Visible = false                    
    End If
Next
Run Code Online (Sandbox Code Playgroud)


Cha*_*adD 7

如果我觉得Visible设置为false的行将无法访问,那么它们将从DOM中删除而不是隐藏,因此我还使用了Display:None方法.就我而言,我希望有一个包含Row键的隐藏列.对我来说,这种声明性方法比使用代码的其他一些方法更清晰.

<style>
   .HiddenCol{display:none;}                
</style>


 <%--ROW ID--%>
      <asp:TemplateField HeaderText="Row ID">
       <HeaderStyle CssClass="HiddenCol" />
       <ItemTemplate>
       <asp:Label ID="lblROW_ID" runat="server" Text='<%# Bind("ROW_ID") %>'></asp:Label>
       </ItemTemplate>
       <ItemStyle HorizontalAlign="Right" CssClass="HiddenCol" />
       <EditItemTemplate>
       <asp:TextBox ID="txtROW_ID" runat="server" Text='<%# Bind("ROW_ID") %>'></asp:TextBox>
       </EditItemTemplate>
       <FooterStyle CssClass="HiddenCol" />
      </asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)


小智 5

GridView1.Columns[columnIndex].Visible = false;
Run Code Online (Sandbox Code Playgroud)