2009-06-08 41 views
2

如何在ASP.NET中显示等级数据?我有一个如下所示的数据源:如何使用ASP.NET显示等级数据?

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

class Node 
{ 
    string Description { get; set; } 
    decimal Amount { get; set; } 
    IEnumerable<Node> SubNodes { 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> 
  • 我试图建立这种使用ListView元素,但我无法弄清楚如何递归调用它。
  • 我也看了TreeView类,但放弃它,因为它使用表格呈现。
  • 我放弃了CSS Friendly Control Adaptors,因为这似乎是网站上所有控件的一个或者开关。
  • 我尝试了一个BulledList,但无法弄清楚如何使它呈现div。

我结束了使用四个相同的嵌套ListView元素,因为我知道我的列表永远不会比四个级别更深。但是这个解决方案非常难看,所以我希望能在这里找到更好的解决方案。 =)

+1

另一方面,尽量不要将div加载作为布局容器 - 尝试首先使用与您的内容语义相匹配的HTML元素,并相应地应用CSS,如果需要,使用display:block - 请参阅http: //daniiswara.net/2009/01/31/div-mania-is-not-semantic-xhtml/ - 如果你绝对必须使用divs – 2009-06-08 13:19:38

+0

是的,我知道这个布局有很多div。但是,有必要在所有浏览器中正确使用动画。如果你关闭CSS,这个解决方案很好地降级到嵌套列表。 – 2009-06-09 06:56:25

回答

3

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

我喜欢使用中继器,因为当你需要一些时间和工作时,它们非常灵活。那,他们并没有放入无关的HTML。 :)

相关问题