2010-07-28 3 views
8

У меня есть дисплей, который должен быть немного более динамичным, чем то, к чему я привык, и не могу найти подходящего ответа.Вложенный репитер

     Customer a  Customer b  Customer c (and so on) 
    savings with product a 

    savings with product b 

    (and so on) 

Я знаю, что в каждом поле всегда будет минимум один. Кто-то сказал, что использует встроенный ретранслятор или что-то в этом роде. Я огляделся и не мог узнать, как использовать вложенный репитер. Я нахожусь в крайнем сроке и не могу по-настоящему играть с вещами, пока не найду что-то, что работает.

Какой контроль над аспидом следует использовать для этого? Пример будет приятным, но мне нужна помощь в правильном направлении.

Я использую sql, но получаю данные по ссылке. Данные попадают в списки.

Благодарим за помощь!

+0

Waht - это форма данных, которые вы получаете из базы данных?и как вы должны представить эту информацию, любые требовательные элементы от дизайна, используя div, таблицы? –

ответ

17

Вложенные ретрансляторы довольно просты. Просто бросить один в вашем ItemTemplate, и в случае OnItemDataBound вашего основного ретранслятора выполните следующие действия

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
{ 
    DataRowView row = (DataRowView)e.Item.DataItem; 

    Repeater nestedRepeater = e.Item.FindControl("NestedRepeater") as Repeater; 
    nestedRepeater.DataSource = getSavingsPerCustomer(row["customerID"]); 
    nestedRepeater.DataBind(); 
} 

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

вероятно неправильный синтаксис, но вы получите идею

<asp:repeater ID="outer"> 
<HeaderTemplate> 
    <div style="float:left"> 
</HeaderTemplate> 
<ItemTemplate> 
    Customer: <%= Eval(customer)%><br/> 
    <asp:repeater ID="NestedRepeater"> 
      <ItemTemplate> 
      Saving: <%= Eval(saving)%><br/> 
      </ItemTemplate> 
    </asp:repeater> 
</ItemTemplate> 
<FooterTemplate> 
    </div> 
</FooterTemplate> 
</asp:repeater> 

Similar SO question: Repeater in Repeater

1

Вы можете использовать GridView с AutoGenerateColumns = "true". Это создаст ваши столбцы на основе источника данных, который вы связываете.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"> 
</asp:GridView> 

Рассмотрим этот класс

public class A 
{ 
    public string Field1 { get; set; } 
    public int Field2 { get; set; } 
} 

и этот код

GridView1.DataSource = new List<A>() { 
    new A() { Field1 = "a", Field2 = 1 }, 
    new A() { Field1 = "b", Field2 = 2 }, 
    new A() { Field1 = "c", Field2 = 3 }, 
}; 
GridView1.DataBind(); 

Это будет генерировать HTML-таблицы с столбцами по имени Field1 и Field2 с соответствующими 3 ряда. Что-то вроде этого.

<table> 
    <tbody> 
     <tr> 
      <th scope=col>Field1</th> 
      <th scope=col>Field2</th> 
     </tr> 
     <tr> 
      <td>a</td> 
      <td>1</td> 
     </tr> 
     <tr> 
      <td>b</td> 
      <td>2</td> 
     </tr> 
     <tr> 
      <td>c</td> 
      <td>3</td> 
     </tr> 
    </tbody> 
</table> 

При изменении источника данных к другому источнику с колоннами он различными будет автоматически генерировать соответствующие столбцы для вас.

3

Я знаю, что этот вопрос для дата, но я нашел этот вопрос, пытаясь выполнить ту же задачу с объектами, и я не нашел ответа и подумал, что это будет полезно для кого-то другого.

Если вы используете объект, который вложен в ней объектов, вы установите источник данных, как этот

DataSource='<%# Eval("ChildDataSourceProperty") %>' 

Я пришел к такому выводу на все другие ответы кажущийся слишком сложный

Вот мой полный код повторителя

<asp:Repeater ID="linkGroups" 
       runat="server" 
       DataSource="add your datasource"> 
    <ItemTemplate> 
     <dt><%# Eval("ParentProperty") %></dt> 
     <dd>     
      <asp:Repeater ID="links" 
          runat="server" 
          DataSource='<%# Eval("ChildDataSourceProperty") %>'> 
       <ItemTemplate> 
        <p><%# Eval("ChildObjectProperty") %></p> 
       </ItemTemplate> 
      </asp:Repeater> 
     </dd> 
    </ItemTemplate> 
</asp:Repeater> 
Смежные вопросы