这将是使用Repeater 类的理想选择。您可以嵌套它们以处理基于初始 DataSource 显示数据的逻辑。由于我不知道您的模型定义,因此我使用了您需要在示例代码中替换的通用占位符。这些占位符的示例包括“SomeFieldFromSp2DataTable”、“FieldNameOfId”、“TheClassOfItemsInYourArrayList”等。
首先,在 ASPX 页面中进行标记。 HeaderTemplate 包含用于数据源标头的标记。 ItemTemplate 是 DataSource 中每个项目正文的标记。 FooterTemplate 在数据源的末尾做标记。在本例中,我对其进行了模拟,以便创建嵌套的 HTML 表。
<asp:Repeater ID="rptSP1" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><asp:Label ID="lblSP1" runat="server"><%# CType(Container.DataItem, TheClassOfItemsInYourArrayList).FieldNameOfId%></asp:Label></td>
</tr>
<asp:Repeater ID="rptSP2" runat="server">
<HeaderTemplate>
<tr><td><table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><asp:Label ID="lblSP2" runat="server"><%#DataBinder.Eval(Container.DataItem, "SomeFieldFromSp2DataTable")%></asp:Label></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table></td></tr>
</FooterTemplate>
</asp:Repeater>
<asp:Repeater ID="rptSP3" runat="server">
<HeaderTemplate>
<tr><td><table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><asp:Label ID="lblSP3" runat="server"><%#DataBinder.Eval(Container.DataItem, "SomeFieldFromSp3DataTable")%></asp:Label></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table></td></tr>
</FooterTemplate>
</asp:Repeater>
</ItemTemplate>
</FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
请注意,访问 ArrayList 值与 DataTable 或更典型的 List(of T) 略有不同。
接下来,您需要为父中继器连接初始 DataSource 绑定:
rptSP1.DataSource = YourArrayList
rptSP1.DataBind()
你还没有完成。您现在必须确保从第一个中继器获取数据,以便为第二个和第三个中继器获取数据源。您可以在 rptSP1 的 ItemDataBound 事件的事件处理程序中完成此操作。由于嵌套的中继器位于 ItemTemplate 中,您必须使用 FindControl 并将它们转换为中继器。
Private Sub rptSP1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptSP1.ItemDataBound
'Perform this check because you only need the actual data items.
If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
Dim intIdFromSp1 As Integer = CType(e.Item.DataItem, TheClassOfItemsInYourArrayList).IdField
Dim rptSP2 As Repeater = CType(e.Item.FindControl("rptSP2"), Repeater)
Dim rptSP3 As Repeater = CType(e.Item.FindControl("rptSP3"), Repeater)
'Code that gets the data from the other SPs would be in a Function called GetDataTableFromSP2.
rptSP2.DataSource = GetDataTableFromSP2(intIdFromSp1)
rptSP2.DataBind()
rptSP3.DataSource = GetDataTableFromSP3(intIdFromSp1)
rptSP3.DataBind()
End If
End Sub