【问题标题】:Nested Repeater嵌套中继器
【发布时间】:2010-07-28 18:38:49
【问题描述】:

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

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

  savings with product b

  (and so on)

我知道每个字段中至少会有一个。有人说使用嵌套中继器或其他东西。我环顾四周,找不到如何使用嵌套中继器。我到了最后期限,在找到可行的方法之前,我无法真正玩弄。

我应该使用什么 asp 控件来执行此操作?举个例子就好了,但我只需要正确方向的帮助。

我正在使用 sql 但通过链接获取数据。数据以列表形式结束。

感谢您的帮助!

【问题讨论】:

  • 你从数据库中得到的数据是什么形状的?您应该如何呈现这些信息、设计中的任何要求、使用 div、表格?

标签: c# asp.net


【解决方案1】:

嵌套中继器非常简单。只需在您的 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

【讨论】:

    【解决方案2】:

    我知道这个问题是针对数据表的,但我在尝试使用对象完成相同任务时发现了这个问题,但我没有找到答案,并认为它对其他人有用。

    如果您使用的对象中包含嵌套对象,则可以像这样设置数据源

    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>
    

    【讨论】:

      【解决方案3】:

      您可以使用带有 AutoGenerateColumns="true" 的 GridView。 这将根据您绑定的数据源创建您的列。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-01
        相关资源
        最近更新 更多