動的オブジェクトを使用して動的に作成されたバインドされたオブジェクトのプロパティをASP.NET GridViewに表示しようとしています。私の例では、DynamicProperties.FullNameは動的です。ASP.NETデータバインディングを使用する動的オブジェクト
私のクライアントコードは次のとおりです。
<asp:ObjectDataSource runat="server" ID="CustomerDataSource" DataObjectTypeName="Customer" TypeName="CustomerCollection" SelectMethod="LoadAll" />
<asp:GridView ID="CustomerGridView" runat="server" AutoGenerateColumns="False" DataSourceID="CustomerDataSource" EnableViewState="False">
<Columns>
<asp:BoundField DataField="FirstName" />
<asp:BoundField DataField="LastName" />
<asp:TemplateField>
<ItemTemplate>
<asp:Label runat="server" Text='<%#Eval("DynamicProperties.FullName")%>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
私のBLLコード(私は明確にするためにそれを単純化し、私はバインディング私のASP.NETで使用CustomerCollection宣言を含んでいませんでした)です:
public partial class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
private dynamic _dynamicProperties;
public dynamic DynamicProperties
{
get
{
if (_dynamicProperties == null)
{
_dynamicProperties = new ExpandoObject();
_dynamicProperties.FullName = FirstName + " " + LastName;
}
return _dynamicProperties;
}
}
}
アプリケーションを実行すると、次のHttpExceptionエラーが発生します。 DataBinding: 'System.Dynamic.ExpandoObject'に 'FullName'という名前のプロパティが含まれていません。
私は何か間違っていると確信していますが、何が見つかりません。 CustomerオブジェクトにFullNameという名前のプロパティを追加し、GetterにDynamicProperties.FullNameを返させると、それはチャームのように機能します(ASP.NET評価ではFullName、DynamicProperties.FullNameは参照されません)。
アイデア?ありがとうございました。
_dynamicPropertiesがnullでない可能性がありますか? getterが呼び出されると、FullNameは追加されません。 –
LoadAllメソッドを表示できますか? –
@Jeremy:LoadAllメソッドはツール(CodeFluent Entities)によって生成されているので、動作するはずです。トレース(またはVSデバッグ)を置くと、メソッドがトリガされ、データが正しくロードされます。私の動的オブジェクトを参照するItemTemplateを削除すると、データはGridViewに問題なく表示されます。 –