我的显示器需要比我使用的显示器更具动态性,似乎无法找到我需要的答案。
Customer a Customer b Customer c (and so on)
savings with product a
savings with product b
(and so on)
我知道每个领域至少会有一个。有人说使用嵌套转发器或其他东西。我环顾四周,无法找到如何使用嵌套转发器。我处于截止日期,在找到合适的东西之前,我不能真正玩弄它。
我应该使用什么asp控制来执行此操作?一个例子很不错,但我只是需要帮助才能朝着正确的方向前进。
我正在使用sql但通过链接获取数据。数据最终列在清单中。
感谢您的帮助!
答案 0 :(得分: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>
答案 1 :(得分: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>
答案 2 :(得分:1)
您可以将GridView与AutoGenerateColumns =“true”一起使用。 这将根据您绑定的数据源创建您的collumns。
<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>
如果您将数据源更改为具有不同列的其他来源,它将自动为您生成相应的列。