通过将每个列的FieldName设置为基础类中的属性名称,可以轻松地将XtraGrid控件绑定到类。我们现在遇到了一种情况,我们希望显示嵌套在底层类中的类的数据。
即。我们有一个“User”类,它包含一个名为“Address”的属性,这是另一个名为“Address”的类。地址内包含街道,城市等属性。
我们希望在网格上显示UserName(来自User类)和Street(来自Address类)。这可能吗?
请注意,Address不是List,它是嵌套在User类中的类。
我们已尝试将网格列FieldName设置为“Address.Street”,但这不能用于拾取数据。我希望这是可能的,这似乎是不支持的基本特征。
答案 0 :(得分:6)
是的,你可以。添加未绑定列并处理CustomUnboundColumnData事件。
未绑定的列。
http://documentation.devexpress.com/#WindowsForms/CustomDocument1477
CustomUnboundColumnData
http://documentation.devexpress.com/#WindowsForms/DevExpressXtraGridViewsBaseColumnView_CustomUnboundColumnDatatopic
答案 1 :(得分:3)
NestedClass.Property只是添加常规属性。
e.g:
settings.Columns.Add(column =>
{
column.Caption = "NestedClass";
column.FieldName = "NestedClass.DataEntry";
column.Name = "NestedClass";
});
最佳方法仍然使用unboundcolumns。但这有效......
答案 2 :(得分:2)
让我们假设您的代码中包含以下类。
1)地址类
public class Address {
public string Street { get; set; }
public string City { get; set; }
}
2)用户类
public class User {
public string UserName { get; set; }
public Address UserAddress { get; set; }
}
现在,您要将列Street绑定到属性User.Address.Street,但遗憾的是,只需将FieldName设置为“Address.Street”
但是,如果以你想要的方式完成它很重要,我建议你覆盖Address类的ToString()方法,如下所示:
public class Address {
public string Street { get; set; }
public string City { get; set; }
//Override ToString() method
public override string ToString() {
return this.Street;
}
}
然后,将字段名称设置为“Address”,而不是“Address.Street”,这应该可以解决问题。
另一种方法是在User类中添加另一个名为UserStreet的只读属性:
public class User {
public string UserName { get; set; }
public Address UserAddress { get; set; }
public UserStreet {
get { return UserAddress != null ? UserAddress.Street : ""; }
}
}
然后将FieldName设置为“UserStreet”。
希望这有帮助。