如何显示隐藏GridView的一列?

时间:2013-01-14 12:31:53

标签: c# asp.net gridview

我在Asp中有一个usercontrol,它有一个GridView,'AutoGenerateColumns =“False”。 我必须根据UC的财产隐藏或显示专栏。我怎么能这样做?

这就是我的想法:

<asp:TemplateField HeaderText="<%=SelezionaColumnName  %>" HeaderStyle-Width="80px">

请注意,此处headerText未设置为公共const字符串SelezionaColumnName,但它的呈现方式与字符串完全相同(不是值,而是带有<%= %>的名称。我不知道为什么,这是因为约束?

代码背后的代码:

public const string SelezionaColumnName = "Seleziona";

        public bool ShowSeleziona
        {
            set
            {
                grdMaterialiArt.Columns[GetColumnIndexByName(grdMaterialiArt, SelezionaColumnName)].Visible = value;
            }
        }

 protected int GetColumnIndexByName(GridView grid, string name)
        {
            foreach (DataControlField col in grid.Columns)
            {
                if (col.HeaderText.ToLower().Trim() == name.ToLower().Trim())
                {
                    return grid.Columns.IndexOf(col);
                }
            }

            return -1;
        }

注意:我必须注意使用0索引。可以在我的列之前添加列,因此我必须唯一地标识列。我继续通过名称方法识别,因为TemplateField不能有ID:| 希望我能够很好地描述这个场景,我也经常搜索,但没有发现类似的东西。

1 个答案:

答案 0 :(得分:3)

 protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
    {

        try
        {
            DataTable dt = (DataTable ) GridView1.DataSource;
            if (!dt.Columns.Contains("COLLUMN_YOU_WANNA_HIDE")) return;
            int j = dt.Columns.IndexOf("COLLUMN_YOU_WANNA_HIDE");
            e.Row.Cells[j].Visible = false;
            e.Row.Cells[j].Width = 0;
        }
        catch (Exception)
        {


        }

    }