在C#中向gridview动态添加列-if语句太多
我正在清理一些代码,我正在使用的是一个gridview,它是在C#的代码中创建的。创建的boundfields具有一个visible属性,该属性稍后将确定是否将其添加到gridView将包含的列集合中 生成gridView时,它引用一个表示默认列集合的属性,但在此属性中,每个boundfield的visible属性都使用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;
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使您的答案优于我