組み込みのObjectDataSource
を使用すると、それぞれのアイテムに別々のデータソースをマッピングするのは、おそらく唯一の簡単な方法です(そして、努力する価値があるほど簡単です)。
ObjectDataSource
を使用する必要がありますか、または別の方法でストレージからデータを取得できますか?エンティティフレームワーク(imho rocks)を使用するか、独自のカスタムタイプを作成することをお勧めします。これはカスタムデザインのDAL(EFを使用するよりもはるかに多くの作業ですが、そのEFはまだ乳児期にありますが、これはあなたの選択肢かもしれません)。どちらの場合も、あなたがタイプIEnumerable<Stakeholder>
とIEnumerable<Outcome>
の性質を有するProgram
と呼ばれるC#クラス、になってしまいます
はそれぞれStakeholders
とOutcomes
と呼ばれます。あなたは、その項目のリピーターのためのデータソースとしてこれらを使用するとProgramRepeater
のItemDataBound
イベントでそれらを設定し、多分このようなものができます。
protected void ProgramRepeater_ItemDataBound(object sender, ItemDataBoundEvent e) {
Program dataItem = (Program)e.DataItem;
Repeater stakeholderRptr = (Repeater)e.Item.FindControl("ProgramRepeater");
Repeater outecomeRptr = (Repeater)e.Item.FindControl("OutcomeRepeater");
stakeholderRptr.DataSource = dataItem.Stakeholders;
stakeholderRptr.DataBind();
outecomeRptr.DataSource = dataItem.Outcomes;
outecomeRptr.DataBind();
}
これはもちろん、あなたがASP.NetのWebフォームを使用していると仮定しています。 ASP.Net MVCではさらにProgram
オブジェクトをModel
オブジェクトとしてView
に送信し、そのStakeholders
とOutcomes
をネストされたfor
ループの2つのループで直接View
にループするだけです。
注:すべてのコードがあるとして提供され、そして私はそれが期待通りに実行したりしてもコンパイルすることを保証するものではありません。あなたのコードを何にするかというアイデアを伝えるだけで、問題を解決するために必要な正確なコードであるとは限りません。
これは私の頭の中にたくさんあることを認めます。私たちは既にあるレベルのDALを確立していますが、ここにどのように適合しているのか分かりません。私のコードをループしたり、テンプレートのカスタムメソッドを書いたりするのではなく、このようにするのはどういうことでしょうか?そのオプションはもっと簡単で、ひどく魅力的です。 私はRepeaterをより直接的に制御するためにIEnumerableを探していますが、以前はこれを使用していませんでした。私は何が起きているかを正確に把握するのに少し時間がかかると思う。 RepeaterがIListSourceを提案した例外も同様です。 – jocull