Мне нужно знать, как размещать повторители в пользовательском элементе управления. С 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 и т. д.
Источник данных - это представление данных, созданное в выделенном коде, где каждая строка имеет 'Name', «Link», «NOtation» и «Discipline». Я привязал представление данных к самому внешнему повторителю, и он ведет себя так, как ожидалось - перечисляет имя дисциплины для каждой записи, но не показывает данных во внутреннем репитере.
Как мне выполнить эту работу?
РЕДАКТИРОВАТЬ: Чтобы уточнить, у меня есть одна таблица данных в коде. Каждая строка в этой таблице - это элемент, каждый элемент относится к дисциплине. Я хочу использовать внешний репитер для перечисления дисциплин, внутренний - для перечисления элементов, сгруппированных по каждой дисциплине. Примерно так:
<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 />")
}
Итак, данные есть, это именно то, что я ожидал увидеть, я просто не могу привязать их к внутреннему повторителю. Если есть более эффективный способ добиться того же, я буду рад переработать свое решение.