2013-03-14 2 views
6

У меня есть элемент управления, который имеет ретранслятор rptReferrals, который проходит через список объектов Entity, Referrals. Объект Referrals имеет ссылку на другую таблицу под названием «Ответы», которая представляет собой список ответов, полученных для пользователя. 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.

Любые идеи о том, как получить доступ к свойству dataitem моего родительского ретранслятора? Я отвечу на этот вопрос.

+0

Я имел эту проблему несколько недель назад, и задал вопрос. [Check here] (http://stackoverflow.com/questions/15137029/accessing-a-nested-repeaters-datasource) –

+0

Я бы поместил содержимое внешнего репитера в отдельный пользовательский элемент управления, тогда вы можете дать ему свойство с любым именем, которое вы хотите для элемента данных. Я бы сказал, что это хорошая идея в целом, потому что имя «Container.DataItem» относится к двум различным вещам, это сбивает с толку. – 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