5

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

即我们有一个“用户”类,它包含一个名为“地址”的属性,它是另一个名为“地址”的类。Address 中包含 Street、City 等属性。

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

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

我们已尝试将网格列 FieldName 设置为“Address.Street”,但这无法获取数据。我希望这是可能的,这似乎是一个不支持的基本功能。

4

3 回答 3

6

是的你可以。添加一个未绑定的列并处理 CustomUnboundColumnData 事件。

未绑定的列。
http://documentation.devexpress.com/#WindowsForms/CustomDocument1477

CustomUnboundColumnData
http://documentation.devexpress.com/#WindowsForms/DevExpressXtraGridViewsBaseColumnView_CustomUnboundColumnDatatopic

于 2011-02-20T08:34:36.643 回答
3

NestedClass.Property 就像常规属性一样添加。

例如:

       settings.Columns.Add(column =>
    {
        column.Caption = "NestedClass";
        column.FieldName = "NestedClass.DataEntry";
        column.Name = "NestedClass";

    });

最好的方法仍然是使用 unboundcolumns。但这有效...

于 2012-11-08T12:51:20.663 回答
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”。

希望这可以帮助。

于 2011-02-20T09:49:32.157 回答