2

2 つのナビゲーション プロパティ (Building1、Room1) を含むエンティティ Resident にマップした EntityDataSource があります。この EntityDataSource を使用するように GridView を設定し、EntityDataSource の Include プロパティを Building1、Room1 に設定して、これらのナビゲーション プロパティを含め、これらの列を GridView に追加しました。関連するナビゲーション プロパティを表示する代わりにアプリケーションを実行すると、次のように表示されます。 webHousingAdmin.Building 実際の値を表示するにはどうすればよいですか? GridView のコードは次のようになります。

        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="lbl1" runat="server" Text='<%# Bind("Building1") %>' />
            </ItemTemplate>
        </asp:TemplateField>

次のコードを使用して、実際の値を表示するようにしました。

            <asp:TemplateField HeaderText="Building">
            <ItemTemplate>
                <asp:Label ID="lblBuilding" Text='<%# Bind("Building1.building_name") %>' runat="server" />
            </ItemTemplate>
        </asp:TemplateField>

しかし、これを行う簡単な方法はありますか?これはテキストを表示するだけで、編集することはできません...境界フィールドとしてそれを行うことができれば理想的です。

4

2 に答える 2

2

Buildingラベルで意味のあるものを取得するには、クラスのスカラー プロパティをLabel...

<asp:Label ID="lbl1" runat="server" Text='<%# Bind("Building1.Name") %>' />

ToString()...またはクラスを上書きできます...

public class Building
{
    public string Name { get; set; }
    public string AnotherText { get; set; }

    public override string ToString()
    {
        return string.Concat(Name, ", ", AnotherText); // or whatever you like
    }
}

バインディング エンジンが呼び出すクラスであるグリッドにプロパティをバインドすると、ToString()オーバーライドしない場合、完全なクラス名 (名前空間のドット クラス名) のみが返されますToString。これは、例にのみ表示される理由を説明していwebHousingAdmin.Buildingます。

編集

この質問とはあまり関係ありません: ただし、データソースとグリッド間の双方向通信のためにBind(だけでなく) とナビゲーション プロパティをバインドしようとすると、問題が発生する可能性があります。Evalおそらくうまくいかないでしょう。この関連する質問と回答を参照してください。

EntityDataSource を使用した 1 つの ASP.NET GridView 内の 2 つの関連するデータベース テーブルの列

于 2011-04-04T15:13:05.990 に答える