我在 SQL Server 中有 2 个表。一张表是所有超级英雄的列表,另一张表是能力列表。当前,在运行时,子转发器应该只获取与父表相关的项目时获取表中的所有项目。在我的 aspx 页面上,我有一个嵌套的中继器,如下所示:
<asp:Repeater id="rptHero" runat="server" DataSourceID="sdsHeros" OnItemDataBound="rptHero_ItemDataBound">
<ItemTemplate>
<table>
<tr>
<td> <%# Eval("HeroName")%> </td>
<asp:Repeater id="rptAbility" runat="server" >
<ItemTemplate>
<tr>
<td> <%# Eval("AbilityName")%> </td>
</tr>
</ItemTemplate>
</asp:Repeater>
</tr>
</table>
<p> </p>
</ItemTemplate>
</asp:Repeater>
<asp:SqlDataSource ID="sdsHero" runat="server" ConnectionString="<%$ ConnectionStrings:SiteSqlServer2 %>"
SelectCommand="SELECT [num], [HeroName] FROM [Super_Heros]"></asp:SqlDataSource>
<asp:SqlDataSource ID="sdsAbility" runat="server" ConnectionString="<%$ ConnectionStrings:SiteSqlServer2 %>"
SelectCommand="SELECT [num], [AbilityName] FROM [Super_Ability]"></asp:SqlDataSource>
在我背后的代码中,我有:
protected void rptHero_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DataRowView row = (DataRowView)e.Item.DataItem;
Repeater nestedRepeater = e.Item.FindControl("rptAbility") as Repeater;
nestedRepeater.DataSource = sdsAbility;
nestedRepeater.DataBind();
}
}
按照我们的优秀顾客在 Stack Overflow 上发布的示例 1和示例 2,这应该可以工作,但是,我认为我跳过的部分是[num]
父中继器与[HeroID]
子中继器的比较,如 SQLJoin 中的。