C # DevExpress XtraGrid, привязка к свойству вложенного класса - PullRequest
5 голосов
/ 20 февраля 2011

Легко привязать элемент управления XtraGrid к классу, задав для FieldName каждого столбца имя свойства в базовом классе.Теперь мы столкнулись с ситуацией, в которой мы хотели бы отобразить данные из класса, вложенного в базовый класс.

, то есть у нас есть класс "User", который содержит свойство с именем "Address", который является другим классом с именем"Адрес".В Address есть такие свойства, как Street, City и т. Д.

Мы хотели бы отобразить в сетке имя пользователя (из класса User) и Street (из класса Address).Это возможно?

Обратите внимание, что Address - это не список, а класс, вложенный в класс User.

Мы попытались установить для столбца сетки FieldName значение "Address.Street", однако это не так.работать, чтобы забрать данные.Я надеюсь, что это возможно, кажется, элементарная функция не поддерживать.

Ответы [ 3 ]

6 голосов
/ 20 февраля 2011

Да, вы можете. Добавьте несвязанный столбец и обработайте событие CustomUnboundColumnData.

Несвязанные столбцы.
http://documentation.devexpress.com/#WindowsForms/CustomDocument1477

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

3 голосов
/ 08 ноября 2012

NestedClass.Property просто добавьте как обычные свойства.

Например:

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

    });

лучший подход остается с использованием несвязанных столбцов.Но это работает ...

2 голосов
/ 20 февраля 2011

Предположим, что в вашем коде есть следующие классы.

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»

Но, если важно, чтобы вы выполняли это так, как хотите, я бы предложил переопределить метод ToString () класса Address следующим образом:

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

    public string City { get; set; }

    //Override ToString() method
    public override string ToString() {
        return this.Street;
    }
}

Затем установите имя поля в «Адрес», а не в «Address.Street», что должно сработать.

Также другим подходом было бы добавить еще одно свойство readonly с именем UserStreet в классе User:

public class User {

    public string UserName { get; set; }

    public Address UserAddress { get; set; }

    public UserStreet {
        get { return UserAddress != null ? UserAddress.Street : ""; } 
    }
}

А затем установите FieldName на «UserStreet».

Надеюсь, это поможет.

...