2013-03-14 16 views
6

Varlık nesneleri, Yönlendirmeler listesinden çalışan bir Tekrarlayıcı, rptReferrals'e sahip bir denetim sahibim. Yönlendirmeler nesnesinin, kullanıcılar için gönderilen Yanıtların bir listesi olan, Yanıtlar adlı başka bir tabloya bir referansı vardır. rptReferrals, bağlı olduğum Yönlendirmeler nesnesine bağlı olmayan, oturum açtığım kişi için bir Soru Listesine bir alt yineleyici, rptQuestionnaire bağlayacaktır. İşte Erişim Ebeveyn Yineleyicileri DataItem Özelliği

aspx kodudur:

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

arka uç kodu:

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

I am having problem Soru listesi gerekli olmadığını ve ben tüm soruları görüntülemek için ihtiyaç Kullanıcının cevap verip vermediğine bakılmaksızın. Ama eğer cevap verdiyseler, cevabı göstermeliyim ki, bu da rptReferrals'a ekli olan özelliktir.

Ebeveyn tekrarlayıcımın data nesnesinin bir özelliğine nasıl erişileceğine dair herhangi bir fikir var mı? Bu noktada herhangi bir cevap alacağım.

+0

. [Check here] (http://stackoverflow.com/questions/15137029/accessing-a-nested-repeaters-datasource) –

+0

Dış tekrarlayıcının içeriğini ayrı bir kullanıcı kontrolüne koydum, sonra ona bir veri öğesi için istediğiniz adı taşıyan özellik. Genel olarak iyi bir fikir olduğunu söyleyebilirim, çünkü 'Container.DataItem' ismine sahip olmak iki farklı şeye kafa karıştırıyor. – millimoose

cevap

10

Sen (onun DataItem, böylece ve) dış RepeaterItem kadar yol çalışması için RepeaterItem kontrolden .Parent özelliğini kullanabilirsiniz. Bu çalışacak gibi

görünüyor:

Birkaç hafta önce bu sorunu vardı ve bir soru sordu
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

Bunu deneyeceğim ve nasıl gittiğini göreceğim! Teşekkürler! – Icestorm0141

+1

@ Icestorm0141 İyi şanslar, nasıl gideceğini bana bildirin! – jadarnel27

+0

Mükemmel çalıştı! Gerçek işaretime dayanarak ".Parent" sayısını değiştirmek zorunda kaldım ama işe yaradı! Teşekkür ederim! – Icestorm0141

İlgili konular