我希望能够GridView
使用我分配的唯一标识符来控制代码隐藏中列的可见性。这样,我可以动态决定显示和隐藏哪些列,而且每次添加新列时都不必更改代码。
我想到的最好的方法是使用HeaderText
列作为唯一标识符,并创建一个函数来循环遍历 中的所有DataControlField
对象GridView.Columns
,搜索请求的 HeaderText。
尽管DataControlField
对象不能具有可以像GridView.Columns["AssignableID"]
. 是否存在DataControlField
无法以这种方式工作的 ID 属性的编程原因,或者它只是一个不存在的功能?
我的问题更多是关于它为什么不存在的原因,而不是隐藏列问题的实际解决方案,但如果有人有更好的方法来实现这一点,我将不胜感激。
根据请求,以下是按 HeaderText 搜索的示例:
protected DataControlField GetColumn(GridView grid, string columnName)
{
foreach (DataControlField column in grid.Columns)
{
if (column.HeaderText == columnName)
{
return column;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
首先,我就在你身边。我也认为这样的代码
myGridView.Columns[0].Visible = false;
Run Code Online (Sandbox Code Playgroud)
与(伪代码)相比,可读性较差且更容易出错:
myGridView.Columns["UserName"].Visible = false;
Run Code Online (Sandbox Code Playgroud)
因此,你的问题为什么没有ID
财产是DataControlField
有道理的。
正如我已经评论过的:
显式声明的列字段可以与自动生成的列字段结合使用。当两者都使用时,首先呈现显式声明的列字段,然后是自动生成的列字段。自动生成的列字段不会添加到 Columns 集合中。
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.columns.aspx
我假设上述事实以及存在不同类型的DataControlFields
like TemplateField
,BoundField
或者ButtonField
是没有财产的原因ID
,因为它是不可预测的。其中一些是手动添加的(以声明方式或编程方式),其他可能会自动添加(如果是ButtonFields
,ID 将自动生成),一些包含在集合中,而另一些则不包含在Columns
集合中,等等。