如何在设置数据源时隐藏网格视图中的列
本文关键字:视图 网格 隐藏 设置 数据源 | 更新日期: 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;