我有以下代码来隐藏列和编辑列标题。但它不会进入foreach。我已经尝试了各种方法,将foreach放入DataBound,RowDataBound,RowCreated事件中。但不行。
GridView1.AutoGenerateColumns = true;
GridView1.DataSource = SomeObject[];
GridView1.DataBind();
foreach (DataControlField col in GridView1.Columns)
{
if (col.HeaderText == "FirstName")
{
col.HeaderText = "First Name";
}
if (col.HeaderText == "SchoolName")
{
col.Visible = false;
}
}
任何人都可以请教我修复。感谢
答案 0 :(得分:1)
请注意,执行AutoGenereateColumns = true
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[index].Visible = false;
}
使用GridView的RowDataBound事件将列设置为不可见。
在aspx页面上,你可以在gridview控件中声明如下
<asp:GridView runat="server" OnRowDataBound="GridView_RowDataBound" .../>
答案 1 :(得分:1)
请改为尝试:
int indexOfSchoolName = -1;
int columnIndex = -1;
foreach(TableCell cell in GridView1.HeaderRow.Cells)
{
columnIndex ++;
if (cell.Text == "FirstName")
{
cell.Text = "First Name";
}
if(cell.Text == "SchoolName") indexOfSchoolName = columnIndex;
}
if(indexOfSchoolName != -1)
{
foreach(GridViewRow row in GridView1.Rows)
{
row.Cells[indexOfSchoolName].Visible = false;
}
}
答案 2 :(得分:0)
为什么不从SomeObject []中删除列或克隆它然后删除列?
答案 3 :(得分:0)
如果SomeObject[]
是一个数组,那么您可能必须尝试复制SomeObject[]
来说CopyObject[]
并操纵此数组以排除所需的列。最后将其重新绑定到网格视图。
答案 4 :(得分:0)
我通常会这样做:
private 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;
}
GridView1.Columns[GetColumnIndexByName(GridView1, "SchoolName")].Visible = false;