У меня есть 2 таблицы в SQL Server. В одной таблице есть список всех супергероев, а другая таблица - список способностей. В настоящее время во время выполнения дочерний ретранслятор получает все элементы в таблице, когда он должен получать только элементы, относящиеся к родительской таблице. На моей странице 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();
}
}
После Example 1 и Example 2 размещены нашими прекрасными меценатов здесь на переполнение стека это должно работать однако, я думаю, что часть, которую я пропускаю, где [num]
родительского ретранслятора сравнивается с [HeroID]
дочернего ретранслятора, как в SQLJoin.
Мне пришлось настроить это чуть-чуть, чтобы работать, но это позволило решить около 98% моей проблемы. Благодаря! –