如何相对于标题字段隐藏gridview中的列?

时间:2014-02-25 05:25:57

标签: c# asp.net gridview

我正在使用gridview来绑定我的数据。我想隐藏相应于标题字段的后端列

    <asp:TemplateField>
        <HeaderTemplate>
            Incident Number
        </HeaderTemplate>
        <ItemTemplate>
            <asp:Label ID="lb_incidentnumber" runat="server" Text='<%# Eval("IncidentNumber")%>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>

我可以简单地写为gv_viewincident.Columns[3].Visible = false;但我想通过提及headername而不是通过给出索引来隐藏列。

怎么做?

3 个答案:

答案 0 :(得分:1)

这一个

for (int i = 0; i < gv_viewincident.Columns.Count; i++)
{
if (gv_viewincident.Columns[i].HeaderText == "Incident Number")
{
gv_viewincident.Columns[i].Visible = false;
}
}

答案 1 :(得分:1)

首先,让我们制作一个extension method,以便更轻松地访问该列。将此类放在名为GridViewExtensions.cs的文件的App_Code文件夹中。

public static class GridViewExtensions
{
    public static DataControlField GetColumnByHeaderText(this DataControlFieldCollection dataControlFieldCollection , string headerText)
    {
        foreach(var column in DataControlFieldCollection)
        {
            if(column.HeaderText==headerText)
                return column;
        }
    }
}

然后就是......

gv_viewincident.Columns.GetColumnByHeaderText("Incident Number").Visible=false;

当然,这假设您将标题文本添加到列中。

<asp:TemplateField HeaderText="Incident Number">

答案 2 :(得分:0)

这是一个应该有效的方法:

List<DataControlField> columns = grid.Columns.Cast<DataControlField>().ToList();

columns.Find(col => col.HeaderText == "Incident Number").Visible = false;