5

各列のFieldNameを基になるクラスのプロパティの名前に設定することで、XtraGridコントロールをクラスにバインドするのは簡単です。基になるクラスにネストされたクラスのデータを表示したいという状況に遭遇しました。

つまり、「Address」という別のクラスである「Address」というプロパティを含む「User」クラスがあります。Address内には、Street、Cityなどのプロパティがあります。

UserName(Userクラスから)とStreet(Addressクラスから)をグリッドに表示したいと思います。これは可能ですか?

Addressはリストではなく、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";

    });

最良のアプローチは、バインドされていない列を使用したままです。しかし、これは機能します...

于 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.Street」ではなく「Address」に設定します。

また、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 に答える