在HeaderTemplate中访问嵌套转发器中的父数据

Pau*_*aul 58 asp.net nested-repeater

简单的问题,不确定有一个简单的答案!

所以这里是代码:(我已经简化了很多,以便更容易阅读)

<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>
Run Code Online (Sandbox Code Playgroud)

如何在HeaderTemplate中访问父转发器中的DataItem?

Pau*_*aul 89

我实际上找到了答案:

使用:

<HeaderTemplate>
    <%# ((RepeaterItem)Container.Parent.Parent).DataItem %>
</HeaderTemplate>
Run Code Online (Sandbox Code Playgroud)

  • 而不是`.Parent.Parent`(可能不正确)使用`.NamingContainer`. (11认同)
  • 如果你在`ItemDataBound`方法中使用代码隐藏:`((RepeaterItem)e.Item.Parent.Parent).DataItem` (5认同)
  • 但我收到此错误:[InvalidCastException]无法将类型为"System.Web.UI.WebControls.Repeater"的对象强制转换为"System.Web.UI.WebControls.RepeaterItem". (3认同)

gre*_*man 40

保罗给出的解决方案对我不起作用,但这样做:

<%# DataBinder.Eval(Container.Parent.Parent, "DataItem.YourProperty")%> 
Run Code Online (Sandbox Code Playgroud)

  • Parent是ItemTemplate,Parent.Parent是Repeater (7认同)

bob*_*tko 9

这是一个旧线程,但似乎适当添加:

在我的情况下,我有2个嵌套的ASPxGridView控件(DevExpress)和Container.Parent.Parent不起作用.

要从子级访问父级数据项,这对我有用:

<%# DataBinder.Eval(Container.NamingContainer.NamingContainer, "DataItem.DbField")%>
Run Code Online (Sandbox Code Playgroud)