5

我希望能够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;
}
4

2 回答 2

2

首先,我就在你身边。我也认为这样的代码

myGridView.Columns[0].Visible = false;

与(伪代码)相比,可读性较差且更容易出错:

myGridView.Columns["UserName"].Visible = false;

因此,您的问题为什么没有ID财产DataControlField是有道理的。

正如我已经评论过的:

显式声明的列字段可以与自动生成的列字段结合使用。当两者都使用时,首先呈现显式声明的列字段,然后是自动生成的列字段。自动生成的列字段不会添加到 Columns 集合中。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.columns.aspx

我假设以上以及存在不同类型的事实DataControlFieldslike TemplateFieldBoundField或者ButtonField是没有ID属性的原因,因为它是不可预测的。其中一些是手动添加的(以声明方式或以编程方式),另一些可能是自动添加的(fe ButtonFields,ID 将自动生成),一些包含在Columns集合中,而另一些则不包含,依此类推。

于 2012-06-07T21:22:09.867 回答
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;
于 2016-01-21T09:35:59.487 回答