如何在GridView中隐藏列?

时间:2014-10-20 23:29:23

标签: c# asp.net gridview

我有一个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的字段。

3 个答案:

答案 0 :(得分:4)

我终于找到了答案here。但是因为我想隐藏第3列,所以我不得不添加一个条件语句。因此,如果要隐藏3列,解决方案将如下:

    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if(e.Row.Cells.Count > 2)
            e.Row.Cells[2].Visible = false;
    }

答案 1 :(得分:3)

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

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

0R

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

这里0是列索引

Hiding column in GridView

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

答案 2 :(得分:2)

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