2013-11-27 53 views
0

我想通过匹配它们的HeaderText在运行时隐藏一些gridView的列,但它不适合我。这里是我试图在运行时隐藏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的

+0

试试这个...的foreach(在GridView1.Columns的DataControlField列) 如果(column.HeaderText == “姓”) column.Visible = FALSE; –

+0

我已经通过给硬编码值试过了,但它没有奏效。 。 。 –

+0

好了做一件事...现在在jQuery中给CSS类控件一个css类... $(“。cssClassName”)。hide(); –

回答

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; 
    } 
} 
0

下面是简单的答案。 创建CSS如下

.classHide { 显示:无 }
然后代替col.hide,只是分配classHide的CssClass到柱上。
例如col.cssclass =“classHide”

+0

我在运行时选择了要从CheckBox隐藏的列名称。 。 。 –

+0

是的,这是没有问题的。从后面的代码你不能设置可见的虚假。因为它没有工作。只是设置col.cssclass =“classhide” –

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) 
      { } 
     } 
     } 
} 
+0

它的工作,但只为一列,就像如果我从CheckBoxList选择名称,类和部分隐藏它只隐藏名称。 。 。 。 –

+0

传递您在cat_check.selecteditemname中选择的列名称 – SK2185

+0

我已再次检查SelectedItem名称和列名称相同 –