Мне нужно знать, как вкладывать ретрансляторы в пользовательский элемент управления. С html-стороны все в порядке, это связывание и код, с которыми мне нужна помощь. Мне удалось найти примеры только с использованием источника данных sql, который не очень помогает.
Мои ретрансляторы выглядят так:
<asp:Panel ID="pnlDiscipline" runat="server" CssClass="">
<asp:Repeater ID="rptDiscipline" runat="server">
<ItemTemplate>
<h4><%#Eval("Discipline")%></h4>
<ul>
<asp:Repeater ID="rptPrograms" runat="server">
<ItemTemplate>
<li><asp:HyperLink runat="server" Text='<%#Eval("Name") %>' NavigateUrl='<%#Eval("Link") %>'></asp:HyperLink> <%#Eval ("Notation") %></li>
</ItemTemplate>
</asp:Repeater>
</ul>
</ItemTemplate>
</asp:Repeater>
То, что мне нужно сделать, мы надеемся, достаточно ясно - дисциплина h4 должна появиться один раз, все записи, которые относятся к дисциплине, перечислены ниже, затем следующий h4, затем соответствующий список, следующий h4 и так далее.
Источником данных является представление данных, созданное в кодовой области, где в каждой строке есть «Имя», «Ссылка», «Нотация» и «Дисциплина». Я привязал представление данных к самому внешнему повторителю, и он ведет себя как ожидалось - списки имя дисциплины для каждой записи, но во внутреннем повторителе нет данных.
Как мне сделать эту работу?
РЕДАКТИРОВАТЬ: Просто чтобы уточнить, у меня есть один дата в коде позади. Каждая строка в этой таблице является предметом, каждый предмет относится к дисциплине. Я хочу использовать внешний повторитель для перечисления дисциплин, внутренний - для перечисления элементов, сгруппированных по каждой дисциплине. Вот так:
<h4>DISCIPLINE 1</h4>
<ul>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ul>
<h4>DISCIPLINE 2</h4>
<ul>
<li>Item</li>
<li>Item</li>
</ul>
<h4>DISCIPLINE 3</h4>
<ul>
<li>Item</li>
<li>Item</li>
</ul>
В настоящее время привязка данных к внешнему повторителю дает следующее (пример использует данные выше):
<h4>DISCIPLINE 1</h4>
<h4>DISCIPLINE 1</h4>
<h4>DISCIPLINE 1</h4>
<h4>DISCIPLINE 2</h4>
<h4>DISCIPLINE 2</h4>
<h4>DISCIPLINE 3</h4>
<h4>DISCIPLINE 3</h4>
Я использовал OnItemDataBound на внешнем повторителе, как было предложено, и в качестве контрольного примера я могу получить доступ к данным:
protected void rptDiscipline_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
{
DataRowView drView = (DataRowView) e.Item.DataItem;
string name = drView["Name"] as string;
string link = drView["Link"] as string;
string notation = drView["Notation"] as string;
Response.Write(name + link + notation + "<br />")
}
Итак, данные есть, это именно то, что я ожидал увидеть, я просто не могу связать их с внутренним ретранслятором. Если есть более эффективный способ добиться того же, я с радостью переделаю свое решение.