C#DevExpress XtraGrid,绑定到嵌套类的属性

Sur*_*esh 5 c# binding devexpress xtragrid

通过将每列的FieldName设置为基础类中的属性名称,可以轻松地将XtraGrid控件绑定到类.我们现在遇到了一种情况,我们希望在嵌套在底层类中的类中显示数据.

即我们有一个"User"类,其中包含一个名为"Address"的属性,这是另一个名为"Address"的类.在地址内是街道,城市等属性.

我们希望在网格上显示UserName(来自User类)和Street(来自Address类).这可能吗?

请注意,Address不是List,它是嵌套在User类中的类.

我们已经尝试将网格列FieldName设置为"Address.Street",但是这不能用于拾取数据.我希望这是可能的,这似乎是不支持的基本特征.

小智 2

假设您的代码中有以下类。

1)地址类

public class Address {
    public string Street { get; set; }

    public string City { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

2)用户类别

public class User {

    public string UserName { get; set; }

    public Address UserAddress { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,您想要将列 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,将字段名称设置为“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 : ""; } 
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将 FieldName 设置为“UserStreet”。

希望这可以帮助。