2013-03-14 96 views
6

我有一个控制器有一个Repeater,rptReferrals,它贯穿实体对象列表,引用。 Referrals对象具有对称为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”这个名字是指两个不同的东西会让人感到困惑。 – 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