Подробно об ответе Келси (за который я бы проголосовал, если бы у меня было достаточно повторений здесь, но это мой самый первый пост на StackExchange - но я сделаю это, когда смогу! РЕДАКТИРОВАТЬ: Я проголосовал за него!), вот некоторый код, который может помочь, так как мне пришлось сделать именно это (с использованием разных типов групп, но по сути это одно и то же), и ответ Келси мне тоже помог.
Обратите внимание, что это, вероятно,не идеально, но это работает для меня.Я заинтересован в улучшении этого.Это немного отличается от подхода Келси.
В моем случае я использую 3 уровня вложенных повторителей в меню навигации в приложении ASP.NET (VB).
Сначала настройте набор данных для привязки к родительскому повторителю в вашем коде.(Я знаю, что вы сказали, что вас не интересуют ответы с наборами данных или таблицами данных, но я не уверен в лучшем способе - что-то должно быть привязано к ретрансляторам ...)
' first load up some datatables with some data.
' you will probably want to optimize how you are grabbing the data
Dim dtCategories As DataTable = GetCategories
Dim dtQuestionGroups As DataTable = GetQuestionGroups
Dim dtQuestions As DataTable = GetQuestions
' name the tables
dtCategories.TableName = "Categories"
dtQuestionGroups.TableName = "QuestionGroups"
dtQuestions.TableName = "Questions"
' add the datatables to a dataset and set some relationships
Dim ds As DataSet = New DataSet
ds.Tables.Add(dtCategories)
ds.Tables.Add(dtQuestionGroups)
ds.Tables.Add(dtQuestions)
' note that your column name identifiers may be different.
ds.Relations.Add("CatQgrp", _
ds.Tables("Categories").Columns("id"), _
ds.Tables("QuestionGroups").Columns("CatID"))
ds.Relations.Add("QgrpQues", _
ds.Tables("QuestionGroups").Columns("id"), _
ds.Tables("Questions").Columns("QgrpID"))
' bind to repeater. only need to bind the parent table
parentRepeater.DataSource = ds.Tables("Categories")
parentRepeater.DataBind()
Так что теперьчто у нас есть настроенные данные, мы можем отобразить их на странице aspx.
<ul>
<li>CATEGORIES
<ul>
<asp:repeater id="parentRepeater" runat="server">
<itemtemplate>
<li><%# DataBinder.Eval(Container.DataItem, "CategoryName")%>
<ul>
<!-- start child repeater 1, which will show the question groups-->
<asp:repeater id="childRepeater1" datasource='<%# Container.DataItem.Row.GetChildRows("CatQgrp") %>' runat="server">
<itemtemplate>
<li><%# Container.DataItem("QgrpName")%>
<ul>
<!-- start child repeater 2, which will show the questions-->
<asp:repeater id="childRepeater2" datasource='<%# Container.DataItem.GetChildRows("QgrpQues") %>' runat="server">
<itemtemplate>
<li><%# Container.DataItem("QuestionName")%></li>
</itemtemplate>
</asp:repeater>
</ul>
</li>
</itemtemplate>
</asp:repeater>
</ul>
</li>
</itemtemplate>
</asp:repeater>
</ul>
</li>
</ul>
YMMV, и вам нужно будет изменить имена столбцов на те, которые вы, конечно, используете в своих таблицах базы данных,но это должно начать вас.