2009-09-11 46 views
56

簡単な質問、単純な答えがあるかどうかわからない!ネストされたリピーターの親データにHeaderTemplateでアクセスする

ので、ここではコードです:

<asp:Repeater runat="server> 
    <ItemTemplate> 
     <asp:Repeater runat="server"> 
      <HeaderTemplate> 
       <h1>My header here for: <%# OuterContainer.DataItem.MyItemName %> </h1> 
      </HeaderTemplate> 
      <ItemTemplate> 
       My items code here 
      </ItemTemplate> 
     </asp:Repeater> 
    </ItemTemplate> 
</asp:Repeater> 

がどのように、HeaderTemplateに(私はそれは多くは読みやすくするために簡略化しました) - 私は、親リピータでのDataItemにアクセスすることができますか?

答えて

89

私は答え実際に発見した:

用途:ポールで与え

<HeaderTemplate> 
    <%# ((RepeaterItem)Container.Parent.Parent).DataItem %> 
</HeaderTemplate> 
+4

と場合を'ItemDataBound'メソッドのコードビハインドに入っています: '((RepeaterItem)e.Item.Parent.Parent).DataItem' – drzaus

+11

'.Parent.Parent'(これは間違える可能性があります)の代わりに'を使います。 NamingContainer'です。 –

+3

しかし、私はこのエラーが発生しています:[InvalidCastException] 'System.Web.UI.WebControls.RepeaterItem'を入力するために 'System.Web.UI.WebControls.Repeater'タイプのオブジェクトをキャストすることができません。 – sms

36

ソリューションが私のために動作しませんでしたが、これはやった:これは古いです

<%# DataBinder.Eval(Container.Parent.Parent, "DataItem.YourProperty")%> 
+1

なぜ、 'Container.Parent'の代わりに' Container.Parent.Parent'が表示されますか? – Arbaaz

+0

@Arbaazこれはあなたが持っているレベルの数、つまり親の数に依存します。例えば親の親。 jqueryのロジックと非常に似ていますが、どういう意味なのか分かりません。 – JazziJeff

+0

NamingContainer階層を使う方が良いです。 NamingContainer階層はマークアップから理解できますが、親階層にはFormViewによって生成されたTableなどの余分なコントロールが含まれている場合があります。 –

8

スレッドを追加するのが適切だと思われます。

私の場合、2つのネストされたASPxGridViewコントロール(DevExpress)とContainer.P arent.Parentは動作しませんでした。

は、子供から親のデータ項目にアクセスするには、これは私のために働いていたものです:

<%# DataBinder.Eval(Container.NamingContainer.NamingContainer, "DataItem.DbField")%> 
4

私は親中継器のプロパティを取得したい場合は、私は通常、この操作を行います。

<%# DataBinder.Eval(((RepeaterItem)Container.Parent.Parent).DataItem, "ThePropertyName")%> 
関連する問題