我有二个类如: nodes,和tree.
现在通过tree的方法,向tree 中的 hashtable 中添加 N 个Node的对象.
它们之间有孙,子,父等多重关系,现在我要如何才能够,按父->子->孙,这样的结构排序输出?
数据实例是这样的:
Node(id,pid,name) 的构造函数.
Tree t = new Tree();
t.AddNode(1,0,"Root");
t.AddNode(2,1,"Parent");
t.AddNode(3,1,"P' brother");
t.AddNode(4,2,"child");
这些添加可能是无序添加的.现在要求结果输出如何形式
[+]-Root
|
+--Parent
| |
| +-- Child
|
+--P' Brother
现在通过tree的方法,向tree 中的 hashtable 中添加 N 个Node的对象.
它们之间有孙,子,父等多重关系,现在我要如何才能够,按父->子->孙,这样的结构排序输出?
数据实例是这样的:
Node(id,pid,name) 的构造函数.
Tree t = new Tree();
t.AddNode(1,0,"Root");
t.AddNode(2,1,"Parent");
t.AddNode(3,1,"P' brother");
t.AddNode(4,2,"child");
这些添加可能是无序添加的.现在要求结果输出如何形式
[+]-Root
|
+--Parent
| |
| +-- Child
|
+--P' Brother
我那个是用C#写的继续于system.web.ui.webcontrols.webcontrol的自定义控件.
现在是有这样的思路,但一直没实现
暴路一个Datasource属性,用于接受DataSet类型数据.
然后把数据加入到hashtable处理.现在是读取的数据是无序的.
所在在客户端用JS控件树时,会位置不正确,全部跑到下面去了.
我想得先调整或者怎么样把hashtable排序好,再输入?
谢...
{
int rootid = getRootID(dataTable);
addNode(0,rootid);
addNodes(rootid,dataTable);
} public void addNode(int pid,int nodeId)
{
//将对应的nodeID加到对应的位置,pid 为0表示是root
} public int getRootID(DataTable dataTable)
{
int rootid = 0;
//Other steps
return rootid ;
} public ArrayList getChild(int pid,DataTable dataTable)
{
ArrayList arrayList = new ArrayList();
//Other steps
return arrayList;
} public void addNodes(int pid,DataTable dataTable)
{
ArrayList arrayList = getChild(pid,dataTable);
if(arrayList != null)
{
foreach(object o in arrayList)
{
int nodeid = 2 ; //此处改为实际取得nodeid
addNode(pid,nodeid);
addNodes(nodeid,dataTable);
}
}
}这是一个简单的实现机制,通过这样,大概可以把你的 DataTable 的数据树形化。但假如想显示正确,那就得在你的Tree的显示机制上面下功夫了。
不知我理解是否正确,你是想写一个类似TreeView的东东?
我Node 的定义是这样的
public class Node {
long id,pid;
string name; public Node(long id,long pid,string name)
{
} ....//NODE 类的属性和方法.
}public class Tree
{
Hashtable nodes; public void AddNode(Node aNode)
{
if(nodes.Length==0)
{
AddNode(new node(0,-1,"ROOT"));
}
else
{
nodes.Add(aNode.Name, aNode);
}
} public void FindChild(Node fNode)
{
// foreach items in hashtable.
}
}问题是,我现要要打印出这个树,结果如(http://www.amoyonline.com/TREENODE.jpg)时.
1.前面的小图标无法控件.如根结点是用[+]图标,展开后是[-],最后结点是|_ 中间节点是|-
2.如果不在输出前排序,那么打开有子节点的节点时,下面的子节点全部跑到最底下了,不是在父节点下面.
能不能POST你的部份代码或多给点帮助谢谢!
也不能知道某个节点是最后节点呀.
Help me...