如何使用ASP.NET显示分层数据?

如何使用ASP.NET显示分层数据?,asp.net,listview,treeview,Asp.net,Listview,Treeview,如何在ASP.NET中显示分层数据?我有一个如下所示的数据源: class Tree { IEnumerable<Node> Nodes { get; set; } } class Node { string Description { get; set; } decimal Amount { get; set; } IEnumerable<Node> SubNodes { get; set; } } 类树 { IEnumerable节点{ge

如何在ASP.NET中显示分层数据?我有一个如下所示的数据源:

class Tree
{
   IEnumerable<Node> Nodes { get; set; }
}

class Node
{
   string Description { get; set; }
   decimal Amount { get; set; }
   IEnumerable<Node> SubNodes { get; set; }
}
类树
{
IEnumerable节点{get;set;}
}
类节点
{
字符串说明{get;set;}
十进制数{get;set;}
IEnumerable子节点{get;set;}
}
我想呈现为div列表,如下所示。我需要div标签,以便在展开和折叠分支时使动画平滑

<ul class="foldable">
   <li>
      <div class="line">
         <div class="description">...</div>
         <div class="amount">...</div>
      </div>
      <div class="line">
         <div class="description">...</div>
         <div class="amount">...</div>
      </div>
      <ul>
         <li>
            <div class="line">
              <div class="description">...</div>
              <div class="amount">...</div>
            </div>
         </li>
      </ul>
   </li>
</ul>
  • ... ... ... ...
    • ... ...
  • 我尝试使用元素构建它,但我不知道如何递归调用它
  • 我还查看了该类,但删除了它,因为它是使用表呈现的
  • 我放弃了,因为这似乎是网站上所有控件的非此即彼的开关
  • 我尝试使用了一个,但不知道如何使它渲染div

我最终使用了四个相同的嵌套ListView元素,因为我知道我的列表永远不会超过四个级别。但是这个解决方案太难看了,我希望在这里找到一个更好的解决方案

您可以使用中继器控件,然后在列表中循环,并为每个具有子节点的节点嵌套另一个中继器。这将需要一些努力,因为您需要以编程方式使用它,但是使用预构建的Repeater控件作为服务器控件将使它变得更加容易


我喜欢使用中继器,因为当你花时间和他们一起工作时,他们非常灵活。这样,他们就不会输入无关的HTML。:)

说得好!如果没有更好的建议,我会将代码移到代码隐藏文件中,因为我实际上喜欢在Visual Studio中编辑标记文件时获得的点击式编程功能。如果是这种情况,那么最好的选择是嵌套的ListView,或者让一些方便的控件开发人员为您开发一个可以执行您的功能的自定义控件。然后您就可以使用设计模式来设置属性了。但是我不能使用递归列表视图吗?:'(这将是一个非常漂亮的解决方案。您可以通过在前端嵌套ListView来递归ListView,但您也必须嵌套数据源,这会给您的数据库带来巨大的压力。顺便说一句,不要将大量的div仅仅作为布局容器扔掉——首先尝试使用与内容语义匹配的HTML元素,然后使用相应地应用CSS,必要时使用display:block-see-only-use-divs如果你一定要的话是的,我知道这个布局有很多div。但是在所有浏览器中都需要正确的动画。如果你关闭CSS,这个解决方案会很好地退化为嵌套列表。