嵌套中继器

时间:2010-07-28 18:38:50

标签: c# asp.net

我的显示器需要比我使用的显示器更具动态性,似乎无法找到我需要的答案。

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

  savings with product b

  (and so on)

我知道每个领域至少会有一个。有人说使用嵌套转发器或其他东西。我环顾四周,无法找到如何使用嵌套转发器。我处于截止日期,在找到合适的东西之前,我不能真正玩弄它。

我应该使用什么asp控制来执行此操作?一个例子很不错,但我只是需要帮助才能朝着正确的方向前进。

我正在使用sql但通过链接获取数据。数据最终列在清单中。

感谢您的帮助!

3 个答案:

答案 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>

Similar SO question: Repeater in 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>

如果您将数据源更改为具有不同列的其他来源,它将自动为您生成相应的列。