在RunTime上隐藏GridView列

时间:2013-11-27 11:27:33

标签: asp.net gridview

我试图通过匹配他们的HeaderText来隐藏运行时的一些gridView列,但它不适用于我。这是我正在尝试的代码

  protected void gridview_rowDataBound(object sender, GridViewRowEventArgs e)
       {

         foreach (DataControlField col in gvRecoed.Columns)
    {
        try
        {
            if (col.HeaderText == cat_check.SelectedItem.Text.Trim())
            {
                col.Visible = false;
            }
        }
        catch (Exception exe)
        { }
     }
   }

cat_check是一个CheckBoxList

3 个答案:

答案 0 :(得分:2)

为什么要隐藏RowDataBound中为网格中的每一行触发的列?

相反,您可以使用在网格数据绑定后调用一次的DataBound事件。

protected void gridview_DataBound(object sender, EventArgs e)
{
    if(cat_check.SelectedItem != null)
    {
        string columnName =  SelectedItem.Text;
        var column = gridView1.Columns.Cast<DataControlField>()
            .FirstOrDefault(c => c.HeaderText == columnName);
        if (column != null) column.Visible = false;
    }
}

答案 1 :(得分:1)

protected void gridview_rowDataBound(object sender, GridViewRowEventArgs e)
{   
     if (e.Row.RowType == DataControlRowType.DataRow)
      {
         foreach (DataControlField col in gvSource.Columns)
          {
           try
            {
              if (col.HeaderText == cat_check.SelectedItem.Text.Trim())
               {
                 col.Visible = false;
                }
             }
            catch (Exception exe)
           { }
         }
      }
}

答案 2 :(得分:0)

这是一个简单的答案。 创建css如下

.classHide { 显示:无 }
然后只需将classHide cssclass分配给列,而不是col.hide。
例如col.cssclass = “classHide”