2009-12-10 128 views
1

我需要遍历自定义对象类型的属性,我从数据库中取回并仅显示包含数据的列。 这意味着我不能简单地将对象列表绑定到数据网格。 我不想遍历每个对象,看看列是否为空/空,并确定在UI中显示它。 我在发送对象之前在我的业务层中发送了一个IEnumerable,只有那些应该可见的列。因此,我正在考虑使用Linq来实现这一点,但我不确定这会非常漂亮。C#匿名类型foreach循环

有没有人知道我可以使用没有大量IF语句的解决方案,我可以通过一个大对象(30列左右)来确定应该显示或不显示的内容。

Foreach (CustomerData customerdata in Customers) 
{ 
    if (!customerdata.address.Equals("")) 
     { 
      dgvCustomerData.Column["Address"].visible = false; 
     } 
     //Continue checking other data columns... 
} 

我希望避免在UI所有这一切,所有的国际单项体育联合会... 我有在这一个大脑放屁谁能帮助我?

感谢

回答

1

看看the .NET Reflection Libraries。您可以使用反射来获取所有对象的属性,并循环查看它们是否为null。然后,您可以返回Key =属性名称和Value = true/false的KeyValuePair对象集合。然后,您将使用keyvaluepairs设置列的可见性...

+0

这更多的是我在想的解决方案,但是我并没有使用散列表,而是考虑更多的IEnumerable列表,然后我可以简单地绑定到数据网格。我会再研究一下。 – Bob 2009-12-10 18:54:19

4

你可以做以下简化它有点

Action<T,string> del = (value,name) => { 
    if (value.Equals("")) { 
    dgvCustomerData.Column[name].Visible = false; 
    } 
}; 
foreach (var data in Customers) { 
    del(data.address,"Address"); 
    del(data.name, "Name"); 
    ... 
} 
+0

我想从UI层拉出来,以便UI不必决定显示或不显示。然而,这是我首先想到的做法。 – Bob 2009-12-10 18:52:20