How to hide a TemplateField column in a GridView How to hide a TemplateField column in a GridView asp.net asp.net

How to hide a TemplateField column in a GridView


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


If you don't prefer hard-coded index, the only workaround I can suggest is to provide a HeaderText for the GridViewColumn and then find the column using that HeaderText.

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


For Each dcfColumn As DataControlField In gvGridview.Columns    If dcfColumn.HeaderText = "ColumnHeaderText" Then        dcfColumn.Visible = false                        End IfNext


If appears to me that rows where Visible is set to false won't be accessible, that they are removed from the DOM rather than hidden, so I also used the Display: None approach. In my case, I wanted to have a hidden column that contained the key of the Row. To me, this declarative approach is a little cleaner than some of the other approaches that use code.

<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>