我有一个包含分层数据的类.我想在我的ASP中呈现这些数据.net webapp使用嵌套的中继器.我该怎么做?我只做过一级筑巢,怎么说是五级呢?

每项可以有零个或多个子项.我基本上就是用一些CSS的东西在每个子平滑上缩进.我不想使用TreeView控件,我想严格使用中继器.

更新:
我的数据来自数据库.我有一个具有一些基本属性的Item DataTable.

Item
{
   ID,
   Name,
   Description,
   ...
}

然后我有一张多对多的桌子:

Parent
{
   ParentID,
   ChildID
}

我遍历每一项并显示其子项;以及其子项的子项.我认为这最好是使用嵌套中继器来实现,但我可能错了.

推荐答案

与处理ItemDataBound相比,处理数据源总是更干净,但在嵌套中继器时更是如此:

<asp:Repeater DataSource="<%#ColOfCol%>" runat="server">
  <ItemTemplate>
    <tr>
      <asp:Repeater DataSource="<%#Container.DataItem%>" runat="server">
        <ItemTemplate>
          <td><%#SomeExtractingMethodLikeEval()%></td>
        </ItemTemplate>
      </asp:Repeater>
    </tr>
  </ItemTemplate>
</asp:Repeater>

内部数据源也可以是一个经过计算的属性,或对返回所需枚举的方法的调用.请注意,它将被一个对象调用.我更喜欢编写特定的版本,然后重载:

protected IEnumerable<string> GetNames(Family fam)
{
  foreach(Person p in fam.Members)
    yield return p.FirstName + " " + p.Surname;
}
protected IEnumerable<string> GetNames(object famObj)
{
    return GetNames((Family)famObj);
}

需要注意的一点是,如果要获取父中继器中的当前对象,则必须使用以下命令获取该对象:

((RepeaterItem)Container.Parent.Parent).DataItem

Asp.net相关问答推荐

在控制器中通过依赖项注入使用ASP.NET变量值时,不会持久化

如何在 asp.net 服务器中使用字体

如何在 ASP.​NET Core 中使用 jquery

当前http上下文的http动词

如何在运行时判断动态数据类型的类型?

如何在 ASP.NET WebForms 中实现 TDD

带有 Web 套接字的 SignalR

在 cookie 中存储多个值

如何将 ASP.NET MVC5 身份验证添加到现有数据库

asp.net Button OnClick 事件未触发

使下拉列表项不可 Select

ASP.NET Core 2.0 为同一端点结合了 Cookie 和承载授权

ASP.NET 中的全局资源与本地资源

在 ASP.NET 中实现 404 的最佳方法

如何在 ASP.Net 网络表单中使用标签?

将 Http 请求读入字节数组

您使用哪个 .NET Memcached 客户端,EnyimMemcached 与 BeITMemcached?

ASP.NET MVC 2.0 JsonRequestBehavior 全局设置

ASP.NET 5、EF 7 和 SQLite - SQLite 错误 1:没有这样的表:博客

ASP.NET 自定义控件 - 未知的服务器标记