我希望这个问题不会令人困惑,我想要做的是将匿名对象列表绑定到网格,我有一个class
Client
,我是将客户端投影到匿名对象列表中,以便我可以在网格中显示其详细信息,如下所示:
this.gridControl1.DataSource = _clients.Select(c => new
{
c.ClientId,
c.FirstName,
c.LastName,
c.Details.Country, //throws NullReferenceException since I added a
//client with no details.
c.Details.City,
c.Details.Adress,
c.Details.Email
}).OrderByDescending(c => c.ClientId);
问题是有些客户可能还没有添加详细信息..当尝试绑定时,我明显得到NullReferenceException
..
我进行投影的原因是为了避免网格中的列Details
无效。
那么,任何解决方案?或者遇到这种不同的方法?感谢
答案 0 :(得分:1)
假设字段是字符串,请尝试
c.Details.Country
等。而不是
datetime.date(df.a_date.year, df.a_date.month, df.a_date.day)
答案 1 :(得分:1)
您可以使用三元运算符执行此操作:
hexdump(pkt)
答案 2 :(得分:1)
如果没有看到客户端是如何创建的,我无法确定什么对您有用。以下是一些建议:
使用"空白"实例化客户端详细信息对象在所有属性中都包含string.Empty。
Make Client.Details一个私有属性,然后公开只有getter的公共属性(Country,City等),当私有Details对象为null时返回空字符串。如果需要从外部访问Details对象,请使用方法而不是属性:
class Details
{
public string Country { get; set; }
}
class Client
{
private Details _details;
public string Country
{
get
{
return _details == null ? string.Empty : _details.Country;
}
}
public Details GetDetails()
{
return _details;
}
}
这将带来额外的好处,允许您消除匿名选择,因为Details对象不再是Property,因此被绑定进程忽略。您可以将客户端集合直接绑定到网格。