如何从头开始构建ASP.NET TreeView ......?

时间:2009-01-15 17:17:32

标签: c# asp.net treeview threaded-comments

我正在尝试在ASP.NET中构建嵌套/线程注释系统。我不知道PHP人员是怎么做到的。它比最初想象的要难得多。

我正在尝试将我的最终获取分层数据输出给用户,但它无法正常工作。

我有一个包含text,itemID和parentID的表。

我想以树视图格式显示信息,但asp.net的标准控件不起作用...

任何人都可以指出我如何将其输出到树视图的正确方向。我已经尝试了嵌套转发器,直接从代码隐藏和树视图控件构建html。

我仍然没有找到解决方案......任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:4)

很快,通过头部(现在无法检入VS2k8),我会使用Linq to SQL来做这样的事情

private void BuildTree()
{
   List<Item> items = from item in dataContext.Items
                      select item;

   List<Item> rootItems = items.FindAll(p => p.ParentID == null );

   foreach ( Item item in rootItems )
   {
      TreeViewNode tvi = new TreeViewNode(item.text);
      BuildChildNodes(tvi, items, item.ID);
      YourTreeNodeName.Nodes.Add(tvi);
   }   
}

private void BuildChildNodes(TreeViewNode parentNode, List<Item> items, long parentID)
{
   List<Item> children = items.FindAll ( p => p.ParentID = parentID );
   foreach( Item item in children)
   {
      TreeViewNode tvi = new TreeViewNode(item.text);
      parentNode.Nodes.Add(tvi);
      BuildChildNodes(tvi, items, item.ID);         
   }
}

答案 1 :(得分:0)

据我了解,如果您有一个包含分层数据的数据库表,您有两个选择:创建自己的自定义数据源,或以编程方式将树视图绑定到数据库表。

我没有您的代码,但您可以使用以下步骤:

  1. 在asp.net页面中声明树视图控件
  2. 使用您的层次数据填充DataTable(通过SqlDataAdapter)(SELECT itemID,parentID FROM ...)
  3. 使用相同的DataTable创建顶级项的DataView(parentID将为null)
  4. 对于DataView的每一行,通过过滤另一个DataView递归添加树视图项,其中每个DataViewRow的parentID等于您在步骤4中循环的行
  5. 几乎所有这些都是使用TreeView.Nodes.Add(theNewNode)完成的,其中NewNode是TreeNode对象的一个​​实例

    我知道这一切听起来很混乱,但我过去做过。我在Stephen Walther ASP.NET Unleashed一书中找到了很好的信息,该书有完整的部分专门用于实现这一目标。