1

我正在清理一些代码,我正在使用的是在 C# 的代码隐藏中创建的 gridview。创建的 boundfields 有一个 visible 属性,稍后将确定它是否添加到 gridView 将包含的列集合中。

构建 gridView 时,它引用一个表示默认列集合的属性,但在此属性中,每个 boundfield 的可见属性都使用 if 语句评估,如果它是可见的,则将其添加到集合中。代码如下所示:

private GridView.BaseFieldCollection _defaultColumns;

private GridView.BaseFieldCollection DefaultColumns
{
    get
    {
        if (Col1.Visible)
        {
            _defaultColumns.Add(Col1);
        }
        if (Col2.Visible)
        {
            _defaultColumns.Add(Col2);
        }
        if (Col3.Visible)
        {
            _defaultColumns.Add(Col3);
        }
        if (Col4.Visible)
        {
            _defaultColumns.Add(Col4);
        }
        if (Col5.Visible)
        {
            _defaultColumns.Add(Col5);
        }
    }
}

问题是要评估大约 30 个字段,并且有 30 个左右的 if 语句不适合我。我希望可能有一个更优雅的解决方案。尽管我想到将所有列添加到某种集合对象(列表、数组等)中,然后循环遍历它,但这样做似乎效率较低。

关于如何更优雅地做这样的事情有什么想法吗?我被难住了...

谢谢

4

2 回答 2

1

但似乎这样做可能效率较低

在此代码成为瓶颈之前,这​​是无关紧要的。例如,加入一些数据库访问,这段代码永远不会成为瓶颈。

var cols = new[] {Col1,Col2,Col3}; // etc
foreach(var col in cols)
{
  if(col.IsVisible)
    _defaultColumns.Add(col);
}

也许:

var cols = new[] {Col1,Col2,Col3}; // etc
_defaultColumns.AddRange(cols.Where(c => c.IsVisible));
于 2012-05-09T15:15:12.997 回答
0

您可以使用转换器显示(或不显示)在其可见性属性上绑定的列

于 2012-05-09T15:23:09.273 回答