У меня Есть дисплей, который должен быть немного более динамичным, чем, к чему я являюсь использованием и, может казаться, вполне не нахожу ответ, в котором я нуждаюсь.
Customer a Customer b Customer c (and so on)
savings with product a
savings with product b
(and so on)
Я знаю, что всегда будет минимум одного в каждом поле. Кто-то сказал, используют вложенный повторитель или что-то. Я озирался и не мог узнать, как использовать вложенный повторитель. Я нахожусь на крайнем сроке и не могу действительно играть с вещами, пока я не нахожу что-то, что работает.
Какое управление asp я должен использовать, чтобы сделать это? Пример был бы хорош, но я просто нуждаюсь в помощи в правильном направлении.
Я использую sql, но получаю данные через ссылку. Данные заканчиваются в списках.
Спасибо за помощь!
Nested Repeaters are pretty easy. Just throw one in your ItemTemplate, and in the OnItemDataBound event of your main repeater do the following
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();
}
Where the template of the outer repeater had a customer name and a repeater and the inner one has the different savings
probably incorrect syntax but you get the idea
<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>
Вы можете использовать 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>
Если вы измените источник данных на другой источник с другими колонками, он автоматически сгенерирует соответствующие колонки для вас.