Web Formsプロジェクトでは、Sqlクエリの結果をDataTableにロードしています。実行時のカスタムビジネスオブジェクトへの動的バインド
これらのDataTableは、私たちがRepeaterウェブコントロールにバインドするフロントエンドに渡されます。
これは素晴らしいです。しかし今、DataTable
の代わりに独自のカスタムクラスにバインドしたいと考えています。残念ながら、私が思ったのは明らかな答えがうまくいかなかったことです(私たちのクラスでIDictionary<string, object>
を実装しています)。
すべてのバインディングに対して具体的なプロパティを作成せずに、EvalをDatumにバインドするにはどうすればよいですか?明らかに、DataRowはバインドするすべてのプロパティを具体的に実装する必要はありません。だから、どういうわけか、EvalはDataRowの名前でプロパティ値を参照できるように思えます。ここで
は、DataSourceがrptTags.DataSource = new[] { new Datum { {"Count", 1} }, new Datum { {"Count", 2 } };
ファイルaspx.csに設定されている
ここpublic class Datum: IDictionary<string, object>
{
private Dictionary<string, object> _entries;
public Datum()
{
_entries = new Dictionary<string, object>();
}
public object this[string s]
{
get
{
return this._entries[s];
}
}
...
}
があるカスタムクラスであり、ここでのaspxファイルに結合され
<asp:Repeater ID="rptTags" runat="server">
<ItemTemplate>
<%# (int)Eval("Count") >
</ItemTemplate>
</asp:Repeater>
上記の例を使用すると、問題のプロパティが存在しないというエラーが表示されます。これは真ですが、d DataRowにも存在しません。どうすればSystem.Data.DataRowのようにバインドできますか?
あなたはあなたのデータモデルクラスとevalの表現を共有することができ、それは希望助けをより簡単にする。 –
「これは何かを試して試してみると悪夢になる」例えば? –
@mark私はそれを得ると思う... – Aristos