如何在设置数据源时隐藏gridview中的列

时间:2013-10-08 15:40:36

标签: c# asp.net gridview

我有以下代码来隐藏列和编辑列标题。但它不会进入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; 
    }
}

任何人都可以请教我修复。感谢

5 个答案:

答案 0 :(得分:1)

请注意,执行AutoGenereateColumns = true

时,列数将为0
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;