2

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

谁能给我建议解决方法。谢谢

4

5 回答 5

1

请注意,当您这样做时,列数将为 0AutoGenereateColumns = 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" .../>
于 2013-10-08T15:46:41.197 回答
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;
    }
}
于 2013-10-08T15:47:00.987 回答
0

如果是一个数组,那么SomeObject[]您可能必须尝试复制并操作该数组以排除您想要的列。最后将其重新绑定到您的网格视图。SomeObject[]CopyObject[]

于 2013-10-08T15:58:04.817 回答
0

为什么不从 SomeObject[] 中删除该列或克隆它然后删除该列?

于 2013-10-08T15:55:42.457 回答
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;
于 2013-10-08T15:58:54.443 回答