如何在设置数据源时隐藏网格视图中的列

本文关键字:视图 网格 隐藏 设置 数据源 | 更新日期: 2023-09-27 18:34:37

>我有以下代码来隐藏列和编辑列标题。但它不会进入原谅。我已经尝试了各种方法,将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; 
    }
}

任何人都可以告诉我解决方法。谢谢

如何在设置数据源时隐藏网格视图中的列

请注意,当您执行AutoGenereateColumns = true时,列计数将为 0

protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[index].Visible = false;
}

以使用 GridView 的 RowDataBound 事件设置不可见的列。

在 aspx 页上,可以在网格视图控件中声明,如下所示

<asp:GridView runat="server" OnRowDataBound="GridView_RowDataBound" .../>

试试这个:

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

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

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

我通常会做这样的事情:

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;