2013-03-14 127 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