如何显示隐藏GridView的列
本文关键字:隐藏 GridView 的列 显示 何显示 | 更新日期: 2023-09-27 17:53:08
我在Asp中有一个usercontrol,它有一个GridView, 'AutoGenerateColumns="False"。我必须根据UC的属性隐藏或显示一个列。我该怎么做呢?
我是这么想的:
<asp:TemplateField HeaderText="<%=SelezionaColumnName %>" HeaderStyle-Width="80px">
注意,这里的headerText没有设置为公共const字符串SelezionaColumnName,但它呈现的是完全一样的(字符串),不是值,而是名称与<%= %>
。我不知道为什么,这是因为绑定吗?
背后的代码:
public const string SelezionaColumnName = "Seleziona";
public bool ShowSeleziona
{
set
{
grdMaterialiArt.Columns[GetColumnIndexByName(grdMaterialiArt, SelezionaColumnName)].Visible = value;
}
}
protected 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;
}
注意:我必须注意使用0索引。可以在我的列之前添加列,因此我必须唯一地标识该列。我继续使用名称识别方法,因为TemplateField不能有ID:|希望我描述的场景足够好,我也搜索了很多,但没有发现类似的东西。
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
try
{
DataTable dt = (DataTable ) GridView1.DataSource;
if (!dt.Columns.Contains("COLLUMN_YOU_WANNA_HIDE")) return;
int j = dt.Columns.IndexOf("COLLUMN_YOU_WANNA_HIDE");
e.Row.Cells[j].Visible = false;
e.Row.Cells[j].Width = 0;
}
catch (Exception)
{
}
}