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>