2013-03-14 14 views
6

Mam formant, który ma Repeater, rptReferrals, który przechodzi przez listę obiektów Entity, poleconych. Obiekt polecający odwołuje się do innej tabeli o nazwie Answers, która jest listą odpowiedzi przesłanych do użytkownika. rptReferrals powiąże replikator potomny, rptQuestionnaire z listą pytań dla osoby, z którą się zalogowałem, która nie jest powiązana z obiektem skierowań, do którego jest związana.Dostęp do nadajników macierzystych DataItem Właściwość

Oto kod 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> 

Kod backend:

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???? 
    } 
} 

Problem mam jest to, że lista pytań nie są wymagane i potrzebne, aby wyświetlić wszystkie pytania niezależnie od tego, czy użytkownik odpowiedział na to, czy nie. Ale jeśli odpowiedź na to pytanie, muszę wyświetlić odpowiedź, która jest właściwością dołączoną do rptReferrals.

Jakieś pomysły dotyczące dostępu do właściwości zestawu danych mojego nadrzędnego wzmacniaka? W tej chwili przyjmuję jakąkolwiek odpowiedź.

+0

miałem ten problem kilka tygodni temu, i zadał pytanie. [Sprawdź tutaj] (http://stackoverflow.com/questions/15137029/accessing-a-nested-repeaters-datasource) –

+0

Umieściłbym zawartość zewnętrznego wzmacniacza w osobnej kontrolce użytkownika, wtedy możesz dać mu właściwość o dowolnej nazwie dla elementu danych. Powiedziałbym, że to ogólnie dobry pomysł, ponieważ posiadanie nazwy "Container.DataItem" odnosi się do dwóch różnych rzeczy jest mylące. – millimoose

Odpowiedz

10

Można użyć atrybutu kontrolki RepeaterItem.Parent na swój sposób pracy do zewnętrznej RepeaterItem (a zatem jego DataItem).

Wygląda to będzie działać:

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

Spróbuję i zobaczę jak to działa! Dzięki! – Icestorm0141

+1

@ Icestorm0141 Powodzenia, daj mi znać, jak to działa! – jadarnel27

+0

To działało idealnie !!! Na podstawie mojego rzeczywistego znacznika musiałem zmodyfikować numer ".Parent", ale zadziałało! Dziękuję Ci! – Icestorm0141