如何在GridView中隐藏列

本文关键字:隐藏 GridView | 更新日期: 2023-09-27 18:27:24

我有一个GridView,如下所示,我想在其中显示SQL Server中存储过程的结果。存储过程根据其参数的输入,以不同的列数返回不同的结果。然而,它的前两列总是measId和valSeq,它们在GridView中被视为DataKeyNames。我想显示存储过程中所有可用的列,但measId和valSeq除外。相反,我想显示2 TemplateField。

    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" 
     DataSourceID="SqlDataSource1" Width="100%"  BackColor="#DEBA84" 
     BorderColor="#DEBA84" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" 
     CellSpacing="2" DataKeyNames="measId,valSeq" 
     onrowupdating="GridView_RowUpdating" Visible="False" 
     EmptyDataText="No data!" EnableModelValidation="True" 
     onrowdatabound="GridView1_RowDataBound">
     <Columns>
        <asp:TemplateField>
        <HeaderTemplate>
            <asp:CheckBox ID="cbCheckAll" runat="server" OnClick="javascript:selectAll(this)" />
        </HeaderTemplate>
        <ItemTemplate>
            <asp:CheckBox ID="Checkbox1" runat="server" />
        </ItemTemplate>
        <ItemStyle Width="25px" />
        </asp:TemplateField>
        <asp:CommandField HeaderText="Action" ShowEditButton="True" />
     </Columns>
     <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
     <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" 
         Font-Names="Verdana" Font-Size="Small" HorizontalAlign="Left" />
     <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
     <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" Font-Names="Verdana" 
         Font-Size="X-Small" HorizontalAlign="Left" />
     <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
</asp:GridView>

我可以成功地声明一个SqlDataSource来从存储过程中检索结果,并将其与GridView绑定。GridView显示TemplateFileds以及从存储过程中检索到的所有列。现在我想隐藏measId和valSeq列。但我找不到任何方法。我似乎无法访问自动绑定到GridView的字段。

如何在GridView中隐藏列

我终于在这里找到了答案。然而,由于我想隐藏第三列,我不得不添加一个条件语句。因此,如果你想隐藏3列,解决方案如下:

    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if(e.Row.Cells.Count > 2)
            e.Row.Cells[2].Visible = false;
    }
<style type="text/css">
     .hidden
     {
         display:none;
     }
</style>
        <Columns>
            <asp:BoundField HeaderStyle-CssClass="hidden" DataField="TemplateID" HeaderText="Template ID" 
                ReadOnly="True" SortExpression="TemplateID" >
                   <ItemStyle CssClass="hidden"/>
            </asp:BoundField>
            <asp:BoundField DataField="TemplateName" HeaderText="Template Name" 
                SortExpression="TemplateName" />
        </Columns>

使用GridView的RowDataBound事件将列设置为不可见。

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

0r

this.myGridview.Columns[0].Visible = false;

这里0是列索引

在GridView 中隐藏列

protected void GridView_PreRender(object sender, EventArgs e)
{
    foreach (DataControlField column in GridView1.Columns)
        if (column.HeaderText == "XXXXXXX")
            column.Visible = false;
}