ASP.NET Gridview列没有ID?
我希望能够使用分配的唯一标识符控制代码隐藏中ASP.NET Gridview列没有ID?,asp.net,gridview,Asp.net,Gridview,我希望能够使用分配的唯一标识符控制代码隐藏中GridView列的可见性。这样,我就可以动态地决定显示和隐藏哪些列,而不必每次添加新列时都更改代码 我想到的最好的方法是使用列的HeaderText作为唯一标识符,并创建一个函数,在GridView.columns中的所有DataControlField对象上循环,搜索请求的HeaderText 我觉得奇怪的是,DataControlField对象不能有一个像GridView.Columns[“AssignableID”]那样可以访问的可分配ID属性
GridView
列的可见性。这样,我就可以动态地决定显示和隐藏哪些列,而不必每次添加新列时都更改代码
我想到的最好的方法是使用列的HeaderText
作为唯一标识符,并创建一个函数,在GridView.columns
中的所有DataControlField
对象上循环,搜索请求的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;
}
首先,我和你在一起。我也认为这样的代码
myGridView.Columns[0].Visible = false;
与(伪代码)相比,可读性较差且更容易出错:
因此,您的问题是为什么DataControlField
中没有ID
属性是有意义的
正如我已经评论过的:
显式声明的列字段可以与
自动生成的列字段。当两者都使用时,显式地
首先呈现声明的列字段,然后是
自动生成的列字段。自动生成列
字段不会添加到列集合
我假设上述情况以及存在不同类型的
DataControlFields
这一事实类似,或者是没有ID
属性的原因,因为它是不可预测的。其中一些是手动添加的(以声明方式或编程方式),其他可能是自动添加的(例如,按钮字段,ID将自动生成),一些包含在中,而其他则不包含,依此类推。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;
如果把你的问题分成几段,阅读和理解起来会容易一些=)我已经为你做了这件事,但仅供将来参考。回到主题:我假设你知道选择它们的顺序,对吗?如下所示:myGridView.Columns[0].Visible=false代码>如果您已经发布了示例代码,以查看如何基于HeaderText切换列的可见性(尽管我可以想象)。那会使你的问题不那么抽象。Edit@jadarnel27:但我也认为这样的代码比(pseudo)可读性差,更容易出错:myGridView.Columns[“UserName”]。Visible=false代码>。更重要的是,当你以后更改列的顺序时。@TimSchmelter我只是想确保OP知道有办法。我完全同意使用“字典式”查找的示例是更可取的方法,数字索引很难维护=)仅供参考:显式声明的列字段可以与自动生成的列字段结合使用。使用这两个字段时,首先呈现显式声明的列字段,然后是自动生成的列字段。自动生成的列字段不会添加到Columns集合中。我想这是有道理的,尽管这仍然令人沮丧。如果有选择的话,我可能会完全放弃使用GridView,因为这些类型的场景都支持自己使用代码创建表。然而,当你采用一个到处使用它们的大型应用程序,而你又没有足够的预算来修复它们时,这并不是一个真正的选择。
if(Grid.Columns["ColumnName"].Visible == true)
Grid.Columns["ColumnName"].Visible = false;
if(Grid.Columns["ColumnName"].Visible == false)
Grid.Columns["ColumnName"].Visible = true;