我希望能够使用我指定的唯一标识符控制代码隐藏中GridView
列的可见性。这样,我可以动态决定显示和隐藏哪些列,每次添加新列时都不需要更改代码。
我想到的最好方法是使用HeaderText
列作为唯一标识符,并创建一个遍历DataControlField
中所有GridView.Columns
个对象的函数,搜索请求的HeaderText。
虽然DataControlField
个对象不能拥有可以像GridView.Columns["AssignableID"]
那样访问的可分配ID属性,但我觉得很奇怪。是否存在程序化原因DataControlField
不能具有以这种方式工作的ID属性,或者它只是一个不存在的功能?
我的问题更多的是它不存在而不是隐藏列问题的实际解决方案的原因,但如果有人有更好的方法来实现这一点我会很感激。
根据请求,这是一个通过HeaderText搜索的示例:
protected DataControlField GetColumn(GridView grid, string columnName)
{
foreach (DataControlField column in grid.Columns)
{
if (column.HeaderText == columnName)
{
return column;
}
}
return null;
}
答案 0 :(得分:2)
首先,我和你在一起。我也认为像这样的代码
myGridView.Columns[0].Visible = false;
比(伪代码)更不易读,更容易出错:
myGridView.Columns["UserName"].Visible = false;
因此,您的问题为什么ID
中没有DataControlField
属性是有道理的。
正如我已经评论过的那样:
明确声明的列字段可以与。结合使用 自动生成的列字段。两者都明确使用时 声明的列字段首先呈现,然后是 自动生成的列字段。自动生成的列 字段未添加到列集合。
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.columns.aspx
我假设上面的内容以及DataControlFields
TemplateField
,BoundField
或ButtonField
等ID
的不同类型的事实是没有ButtonFields
的原因财产,因为它是不可预测的。其中一些是手动添加的(以声明方式或编程方式添加),其他一些可能会自动添加(fe {{1}},ID会自动生成),一些包含在Columns
collection中,而其他则不包括在内等等
答案 1 :(得分:0)
ASP.NET网格视图列无法在代码中访问ID或唯一值。
我们可以使用索引或名称。
例如:
使用索引:
if(Grid.Columns[0].Visible == true)
Grid.Columns[0].Visible = false;
if(Grid.Columns[0].Visible == false)
Grid.Columns[0].Visible = true;
使用姓名:
if(Grid.Columns["ColumnName"].Visible == true)
Grid.Columns["ColumnName"].Visible = false;
if(Grid.Columns["ColumnName"].Visible == false)
Grid.Columns["ColumnName"].Visible = true;