如何从 parent 中继器读取数据项?
How to read a dataitem from a parent repeater?
如何从 parent 转发器读取数据项?
<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>
我正在尝试让属于中继器的数据项 MyRepeaterDataItem
出现在嵌套的网格视图中 header。
我试过使用 .Parent
和 .NamingContainer
但无法使用 VB.NET
获得正确的语法
假设您在 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")
从任何嵌套控件获取父数据项
经过反复试验,我找到了一个无需任何代码即可运行的简单解决方案。
VB.NET
<HeaderTemplate>
<%# DataBinder.Eval(Container, "NamingContainer.NamingContainer.DataItem.MyRepeaterDataItem")%>
</HeaderTemplate>
其中MyRepeaterDataItem
是数据列。
如何从 parent 转发器读取数据项?
<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>
我正在尝试让属于中继器的数据项 MyRepeaterDataItem
出现在嵌套的网格视图中 header。
我试过使用 .Parent
和 .NamingContainer
但无法使用 VB.NET
假设您在 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")
从任何嵌套控件获取父数据项
经过反复试验,我找到了一个无需任何代码即可运行的简单解决方案。
VB.NET
<HeaderTemplate>
<%# DataBinder.Eval(Container, "NamingContainer.NamingContainer.DataItem.MyRepeaterDataItem")%>
</HeaderTemplate>
其中MyRepeaterDataItem
是数据列。