如何从父转发器读取数据项?
<asp:Repeater ID="rpt" runat="Server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "MyRepeaterDataItem")%>
<asp:GridView ID="gv" runat="Server">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<%# DataBinder.Eval(Container.DataItem, "MyRepeaterDataItem")%>
</HeaderTemplate>
<ItemTemplate>
TEXT
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ItemTemplate>
</asp:Repeater>
我试图让属于转发器的dataitem MyRepeaterDataItem
出现在嵌套的gridviews标题中。
我尝试使用.Parent
和.NamingContainer
,但无法使用 VB.NET
答案 0 :(得分:1)
假设您将数据源绑定到RepeaterItem的ItemDataBound事件处理程序中的GridView,您可以使用AddHandler为GridView的RowCreated(或DataBound)事件连接处理程序:
Private Sub rpt_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles rpt.ItemDataBound
If e.Item.ItemType = ListItemType.AlternatingItem OrElse e.Item.ItemType = ListItemType.Item Then
AddHandler gvTarget.RowCreated, AddressOf GridViewRowCreated
'Bind your Datasource to the GridView AFTER you wire it up:
'Dim gvTarget As GridView = CType(e.Item.FindControl("gv"), GridView)
'gvTarget.DataSource = lstYourDataSource
'gvTager.DataBind()
End If
End Sub
那么gv的RowCreated的事件处理程序可以从父RepeaterItem获取值:
Public Sub GridViewRowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
Dim lblHeader As Label = CType(e.Row.FindControl("lblGridViewHeader"), Label)
'Check due to Header/Footer.
If Not lblHeader Is Nothing Then
lblHeader.Text = DataBinder.Eval(CType(sender.Parent, RepeaterItem).DataItem, "MyRepeaterDataItem")
End If
End Sub
上面提到的代码要求您为GridView的HeaderTemplate添加标签:
<asp:GridView ID="gv" runat="Server">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:Label ID="lblGridViewHeader" runat="server"></asp:Label>
</HeaderTemplate>
<ItemTemplate>
TEXT
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
或者你可以选择在GridViewRowCreated中执行此操作:
e.Row.Cells(0).Text = DataBinder.Eval(CType(sender.Parent, RepeaterItem).DataItem, "MyRepeaterDataItem")
答案 1 :(得分:0)
经过一些试验和错误后,我制定了一个简单的解决方案,可以在没有任何代码的情况下工作。
<强> VB.NET 强>
<HeaderTemplate>
<%# DataBinder.Eval(Container, "NamingContainer.NamingContainer.DataItem.MyRepeaterDataItem")%>
</HeaderTemplate>
MyRepeaterDataItem
是数据列。