【问题标题】:C# anonymous type foreach loopingC#匿名类型foreach循环
【发布时间】:2010-12-25 08:56:16
【问题描述】:

我需要遍历从数据库返回的自定义对象类型的属性,并且只显示包含数据的列。 这意味着我不能简单地将对象列表绑定到数据网格。 我不想遍历每个对象并查看该列是否为空/null 并确定在 UI 中显示它。 我在想的是在我的业务层中,在我发回对象之前,我会发回一个 IEnumerable,其中只有那些应该可见的列。因此,我正在考虑使用 Linq to Object 来执行此操作,但我不确定这是否会非常漂亮。

有谁知道我可以在没有大量 IF 语句的情况下使用的解决方案,我可以通过检查一个大对象(大约 30 列)来确定应该显示什么。

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

我希望在 UI 和所有 IF 中避免所有这些... 我在这个问题上放了个屁,谁能帮帮我?

谢谢

【问题讨论】:

    标签: c# forms c#-3.0 anonymous-types business-logic-layer


    【解决方案1】:

    您可以执行以下操作来简化它

    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");
      ...
    }
    

    【讨论】:

    • 我想把它从 UI 层中拉出来,这样 UI 就不必决定显示什么或不显示什么。然而,这是我一开始就想这样做的方法。
    【解决方案2】:

    看看the .NET Reflection Libraries。您可以使用反射来获取对象的所有属性,并遍历它们以确定它们是否为空。然后您可以返回 KeyValuePair 对象的集合,其中 Key = 属性名称,Value = true/false。然后,您将使用键值对设置列可见性...

    【讨论】:

    • 这更像是我在想的解决方案,但我想的不是散列表,而是我可以简单地绑定到数据网格的 IEnumerable 列表。我将对此进行更多研究。
    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    相关资源
    最近更新 更多