Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中向gridview动态添加列-if语句太多_C#_Gridview_If Statement - Fatal编程技术网

在C#中向gridview动态添加列-if语句太多

在C#中向gridview动态添加列-if语句太多,c#,gridview,if-statement,C#,Gridview,If Statement,我正在清理一些代码,我正在使用的是一个gridview,它是在C#的代码中创建的。创建的boundfields具有一个visible属性,该属性稍后将确定是否将其添加到gridView将包含的列集合中 生成gridView时,它引用一个表示默认列集合的属性,但在此属性中,每个boundfield的visible属性都使用if语句进行计算,如果它是可见的,则将其添加到集合中。代码如下所示: private GridView.BaseFieldCollection _defaultColumns;

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

生成gridView时,它引用一个表示默认列集合的属性,但在此属性中,每个boundfield的visible属性都使用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语句。我希望有一个更优雅的解决方案。虽然我想到了将所有列添加到某种集合对象(列表、数组等)中,然后在其中循环,但这样做似乎效率较低

你有没有想过如何做得更优雅一点?我被难住了

谢谢

但这样做似乎效率较低

在这段代码成为瓶颈之前,这是不相关的。例如,再加上一点数据库访问,这一点代码将永远不会成为瓶颈

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));
但这样做似乎效率较低

在这段代码成为瓶颈之前,这是不相关的。例如,再加上一点数据库访问,这一点代码将永远不会成为瓶颈

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));

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

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

为什么不添加所有列并让可见性确定它们是否显示?您不能将这些列设置为
Col[x]
字段到数组中并在其上循环?zneak的解决方案将使您能够使用LINQ:
列。其中(c=>c.Visible)
为什么不添加所有列,并让可见性确定它们是否显示?您不能将它们设置为
Col[x]
将字段放入数组并在其上循环?zneak的解决方案将使您能够使用LINQ:
列。其中(c=>c.Visible)
您比我强,并且您使用LINQ使您的答案优于我,您使用LINQ使您的答案优于我