DataTable的字段如下:  
ID                本记录ID    
ParID          父结点ID  
Text            结点显示文本  
 
原先是用递归加了一个字段IsLast--是否最后一级  
private  TreeNode  NewNodeCollection(int  index, string text_Node)
{  
   TreeNode  temp_TreeNode  =  new  TreeNode(text_Node);  
   foreach(DataRow  dr  in  m_NodeTable.Rows)  
   {  
      if((int)dr["ParID"]==index)  
         if  (!(bool)dr["IsLast"])  temp_TreeNode.Nodes.Add(NewNodeCollection((int)dr["ID"],(string)dr["Text"]));  
         else  temp_TreeNode.Nodes.Add((string)dr["Text"]);  
    }  
    return  temp_TreeNode;  
}  
 
现要求不能增加任何字段,该如何实现

解决方案 »

  1.   

    myTreeData root = new myTreeData();
    myTreeData child = null;
    for (i = 0 ; i < ds.Tables[0].Rows.Count; ++i)
    {
    child = new myTreeData(ds.Tables[0].Rows[i][textColumnName].ToString(),ds.Tables[0].Rows[i][tagColumnName],ds.Tables[0].Rows[i][parentColumnName]);
    root.Add(child);
    } root.ShowTree(tv);
    /// <summary>
    /// 树型节点数据类
    /// </summary>
    public class myTreeData
    {
    public myTreeData()
    {
    }
    public myTreeData(string name)
    {
    Name = name;
    }
    public myTreeData(string name,object tag,object parent)
    {
    Name = name;
    Tag = tag;
    Parent = parent;
    }
    /// <summary>
    /// 子数据集合
    /// </summary>
    private myTreeDataCollection Child = new myTreeDataCollection();
    /// <summary>
    /// 数据对象
    /// </summary>
    public object Tag = null; /// <summary>
    /// 名称
    /// </summary>
    public string Name = ""; /// <summary>
    /// 父亲
    /// </summary>
    public object Parent = null;
    /// <summary>
    /// 添加子数据
    /// </summary>
    /// <param name="child">子数据</param>
    public void Add(myTreeData child)
    {
    int i;
    for (i =  this.Child.Count - 1; i >= 0;--i)
    {
    if (Convert.ToInt32(this.Child[i].Parent) == Convert.ToInt32(child.Tag) )
    {
    child.Child.Add(this.Child[i]);
    this.Child.RemoveAt(i);
    }
    }
    myTreeData parent = FindParent(this,child);
    if (parent == null)
    {
    this.Child.Add(child);
    }
    else
    {
    parent.Child.Add(child);
    }
    }
    /// <summary>
    /// 查找父亲数据
    /// </summary>
    /// <param name="child">子数据</param>
    /// <returns>父亲数据或者null</returns>
    public myTreeData FindParent(myTreeData parent,myTreeData child)
    {
    int i;
    for (i = 0; i < parent.Child.Count; ++i)
    {
    if (Convert.ToInt32(parent.Child[i].Tag) == Convert.ToInt32(child.Parent))
    {
    return parent.Child[i];
    }
    myTreeData temp = FindParent(parent.Child[i],child);
    if (temp != null)
    {
    return temp;
    }
    }
    return null;
    }
    /// <summary>
    /// 将子数据显示到TreeView
    /// </summary>
    /// <param name="tv">TreeView</param>
    public void ShowTree(TreeView tv)
    {
    int i;
    TreeNode tn = null;
    for (i = 0 ; i < this.Child.Count; ++i)
    {
    tn = tv.Nodes.Add(this.Child[i].Name);
    tn.Tag = this.Child[i].Tag;
    ShowTree(tn,this.Child[i]);
    }
    }
    /// <summary>
    /// 递归显示数据
    /// </summary>
    /// <param name="tn">节点</param>
    /// <param name="child">数据</param>
    private void ShowTree(TreeNode tnParent,myTreeData child)
    {
    int i;
    TreeNode tn = null;
    for (i = 0 ; i < child.Child.Count; ++i)
    {
    tn = tnParent.Nodes.Add(child.Child[i].Name);
    tn.Tag = child.Child[i].Tag;
    ShowTree(tn,child.Child[i]);
    }
    }
    /// <summary>
    /// 树型节点集合类
    /// </summary>
    internal class myTreeDataCollection : AddCollectionBase
    {
    public myTreeDataCollection()
    {
    }

    public myTreeData this[int index]
    {
    get
    {
    return (myTreeData)List[index]; }
    }
    }
    }