2013-03-14 7 views
6

リピータrptReferralsを持つコントロールがあり、これはEntityオブジェクトの一覧、リフェラルを実行します。 Referralsオブジェクトには、Answersという別のテーブルへの参照があります。Answersは、ユーザーに対して送信されたAnswersのリストです。 rptReferralsは、ログインしている人の質問リストに子リピートrptQuestionnaireをバインドします。これは、バインドされている参照オブジェクトには接続されていません。ここで 親リピータへのアクセスDataItemプロパティ

は、ASPXコードです:

<asp:Repeater runat="server" ID="rptReferrals" OnItemDataBound="rptReferrals_OnItemDataBound"> 
    <ItemTemplate> 
     //some HTML for the referral object 
     <asp:Repeater runat="server" ID="rptQuestionnaire" OnItemDataBound="rptQuestionnaire_OnItemDataBound"> 
       //some HTML for displaying questions and answers 
     </asp:Repeater> 
    </ItemTemplate> 
</asp:Repeater> 

バックエンドのコード:

protected void rptReferrals_OnItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     //THIS IS THE ITEM THAT HAS THE LIST OF ANSWERS I NEED 
     var data = e.Item.DataItem as PatientReferral; 
     var rptQuestionnaire = e.Item.FindControl("rptQuestionnaire") as Repeater; 
     rptQuestionnaire.DataSource = QuestionList; 
     rptQuestionnaire.DataBind(); 

     //QuestionList is a list of questions populated on page load. 
     // I can't bind to the property of data.Answers because not 
     //all questions are answered. data.Answers is only a list of 
     //the questions answered 
    } 
} 

protected void rptQuestionnaire_OnItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Need to access the data.Answers object from above. HOW???? 
    } 
} 

私が午前の問題は、質問のリストが必要とされていないということであると私はすべての質問を表示する必要がありますユーザーがそれに答えたかどうかにかかわらず。しかし、回答があった場合は、回答を表示する必要があります。回答はrptReferralsに添付されています。

私の親リピータのデータ項目のプロパティにアクセスする方法に関するアイデアはありますか?私はこの時点で何か答えをとるでしょう。

+0

私は数週間前にこの問題を抱えていた、と質問をしました。 [ここをクリック](http://stackoverflow.com/questions/15137029/accessing-a-nested-repeaters-datasource) –

+0

私は別のユーザーコントロールに外側のリピーターの内容を入れて、それを与えることができますデータ項目に任意の名前を付けることができます。 'Container.DataItem'という名前を持つことは、2つの異なることを混乱させるので、一般的には良いアイデアだと言いたいと思います。 – millimoose

答えて

10

RepeaterItemコントロールの.Parent属性を使用して、外側のRepeaterItem(したがって、DataItem)まで作業することができます。これがうまくいくように

は思え:

protected void rptQuestionnaire_OnItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Repeater currentRepeater = (Repeater)sender; 
     // Note that you might only need one ".Parent" here. Or you might need 
     // more, depends on your actual markup. 
     var data = ((RepeaterItem)e.Item.Parent.Parent).DataItem as PatientReferral; 
     // Now you have access to data.Answers from the parent Repeater 
    } 
} 
+0

私はそれを試して、それがどうなるか見てみましょう!ありがとう! – Icestorm0141

+1

@ Icestorm0141幸運にも、それがどうなるか教えてください! – jadarnel27

+0

それは完璧に機能しました!私の実際のマークアップに基づいて、私は ".Parent"の数を変更しなければならなかったが、うまくいった!ありがとうございました! – Icestorm0141

関連する問題