3

わかりました、次のようなオブジェクトがあるとしましょう:

public class User {
    public int ID { get; set; }
    public String Name { get; set; }
    public String Surname { get; set; }
    public String Description { get; set; }
    public Location Location { get; set; }
}

最後のプロパティはLocationタイプのオブジェクトであることに注意してください。Location オブジェクトを見てみましょう。

public class Location {
    public String ID { get; set; }
    public String Address { get; set; }
    public String PostCode { get; set; }
}

ここで、グリッドビューにユーザーのリストを表示したいのですが、データリーダーやデータ オブジェクトを使用する代わりに、List of Users コレクションを使用したいので、List コレクションを提供するメソッドを呼び出して、グリッドビューをデータバインドします。このような:

gvUsers.DataSource = getUsers(); // This returns a List<User> collection.
gvUsers.DataBind();

今、いくつかの BoundFields と Templatefields を使用してデータを表示しましたが、次のように問題なく動作します。

<asp:GridView ID="gvUsers" runat="server" AutoGenerateColumns="False" >
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="Name" />
        <asp:BoundField DataField="Description" HeaderText="Description" />
        <asp:TemplateField HeaderText="Surname">
            <ItemTemplate>
                <asp:Label ID="lbSurname" runat="server" Text='<%# Eval("Surname") %>'></asp:Label>
                <asp:HiddenField ID="hdnUserId" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "ID") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Location オブジェクトのプロパティにアクセスしようとすると問題が発生します。これをテンプレート フィールドで想像してください。

<asp:HiddenField ID="hdnLocationName" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "Location.PostCode") %>' />

それはうまくいきません。

テンプレートフィールドを使用して表示する方法があるかどうかはわかりません。また、BoundField を使用してそれを行う方法があるかどうかも疑問です。

フロントエンドだけではできない場合は、データバインドされた gridView のバックエンドで何とかできますか? 代わりにLINQを使用して選択に設定する必要がありますか?

4

3 に答える 3

1

あなたが知ることができる最善の方法は、単に から値を引き出すプロパティを追加することですLocation。このようなもの:

public class User {
    public int ID { get; set; }
    public String Name { get; set; }
    public String Surname { get; set; }
    public String Description { get; set; }
    public Location Location { get; set; }
    public String LocationPost {get{return Location.Post;}}
}
于 2012-04-18T15:51:48.480 に答える
1

デムターの法則が適用されます。つまり、そのようにバインドしたい場合は、Postcode をユーザーのプロパティにする必要があります。

このページでは、デメテルの法則の良い例を示します。

于 2012-04-18T15:42:05.260 に答える
0

よりクリーンな解決策は、説明を表す場所で ToString メソッドをオーバーライドすることです。

于 2015-05-12T08:18:25.967 に答える