TreeView
Using YUIAsp.Net TreeView control, you are able to display nested data. You have client side/postback/update panel support.
<yui:TreeView ID="TreeView1" OnClientNodeExpand="ExpandNode" OnClientNodeClick="ClickNode" runat="server">
<Nodes>
<yui:TreeNode Text="Leaf Node" Value="n1"></yui:TreeNode>
<yui:TreeNode Text="node 2" Value="n2">
<Nodes>
<yui:TreeNode Text="YUIAspNetControls">
<Nodes>
<yui:TreeNode Text="Calendar"></yui:TreeNode>
<yui:TreeNode Text="TreeView">
<Nodes>
<yui:TreeNode Text="Lazy TreeView"></yui:TreeNode>
<yui:TreeNode Text="Autopostback TreeView"></yui:TreeNode>
<yui:TreeNode Text="Other..."></yui:TreeNode>
</Nodes>
</yui:TreeNode>
</Nodes>
</yui:TreeNode>
<yui:TreeNode Text="ASP.NET">
<Nodes>
<yui:TreeNode Text="v 1.0"></yui:TreeNode>
<yui:TreeNode Text="v 1.1"></yui:TreeNode>
<yui:TreeNode Text="v 2.0"></yui:TreeNode>
</Nodes>
</yui:TreeNode>
</Nodes>
</yui:TreeNode>
<yui:TreeNode Text="Secret node" Value="secret">
<Nodes>
<yui:TreeNode Text="Not allowed to see!"></yui:TreeNode>
</Nodes>
</yui:TreeNode>
</Nodes>
</yui:TreeView>
You can easily add nodes from ASP.NET markup, or from code behind, you can decide from client handlers what to happen when a node is collapsed, expanded or clicked.
Node: The tree nodes aren't stored anywhere, so after each postback, they will be lost. I chose this approach to keep the control fast & simple. If you feel viewstate support is important for you, please let me know