Как размещать повторители в asp.net

Мне нужно знать, как размещать повторители в пользовательском элементе управления. С 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 />")
}

Итак, данные есть, это именно то, что я ожидал увидеть, я просто не могу привязать их к внутреннему повторителю. Если есть более эффективный способ добиться того же, я буду рад переработать свое решение.

7
задан Nathan 30 May 2011 в 04:45
поделиться