2009-04-29 5 views
1

ASP.NETのRepeaterオブジェクトを使用して、オブジェクトのプロパティをループオーバーしようとしています。例えばASP.NETリピータをオブジェクトプロパティで使用する

...私はIDによってオブジェクト「プログラム」をつかむためのObjectDataSourceを持っている...

プログラムは、「利害関係者」と「成果のリストであるProgram.StakeholdersとProgram.Outcomesなどの特性を有しています"オブジェクト。

今私が本当にやりたいことは、これらのプロパティをターゲットにしてそれらに含まれるリストをループすることです。しかし、私が知る限り、それぞれのリストを取得するために個々のメソッドに結びつけて、それぞれに個別のデータソースを設定する必要があります。

誰でもこれらのRepeaterオブジェクトを使用するより良い方法を提供できますか、いくつかのリソースを教えてください。これが意味をなさない場合、私はそれをもっと明確にしようとすることができます。

答えて

1

組み込みのObjectDataSourceを使用すると、それぞれのアイテムに別々のデータソースをマッピングするのは、おそらく唯一の簡単な方法です(そして、努力する価値があるほど簡単です)。

ObjectDataSourceを使用する必要がありますか、または別の方法でストレージからデータを取得できますか?エンティティフレームワーク(imho rocks)を使用するか、独自のカスタムタイプを作成することをお勧めします。これはカスタムデザインのDAL(EFを使用するよりもはるかに多くの作業ですが、そのEFはまだ乳児期にありますが、これはあなたの選択肢かもしれません)。どちらの場合も、あなたがタイプIEnumerable<Stakeholder>IEnumerable<Outcome>の性質を有するProgramと呼ばれるC#クラス、になってしまいます

はそれぞれStakeholdersOutcomesと呼ばれます。あなたは、その項目のリピーターのためのデータソースとしてこれらを使用するとProgramRepeaterItemDataBoundイベントでそれらを設定し、多分このようなものができます。

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に送信し、そのStakeholdersOutcomesをネストされたforループの2つのループで直接Viewにループするだけです。


注:すべてのコードがあるとして提供され、そして私はそれが期待通りに実行したりしてもコンパイルすることを保証するものではありません。あなたのコードを何にするかというアイデアを伝えるだけで、問題を解決するために必要な正確なコードであるとは限りません。

+0

これは私の頭の中にたくさんあることを認めます。私たちは既にあるレベルのDALを確立していますが、ここにどのように適合しているのか分かりません。私のコードをループしたり、テンプレートのカスタムメソッドを書いたりするのではなく、このようにするのはどういうことでしょうか?そのオプションはもっと簡単で、ひどく魅力的です。 私はRepeaterをより直接的に制御するためにIEnumerableを探していますが、以前はこれを使用していませんでした。私は何が起きているかを正確に把握するのに少し時間がかかると思う。 RepeaterがIListSourceを提案した例外も同様です。 – jocull

関連する問題