用TreeView顯示數(shù)據(jù)通用方法
2024-07-21 02:16:09
供稿:網(wǎng)友
 
public void treeviewdata(dataset ds,string    textcolumnname,string parentcolumnname,string tagcolumnname)
{
 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>
 /// 樹型節(jié)點(diǎn)數(shù)據(jù)類
 /// </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>
  /// 子數(shù)據(jù)集合
  /// </summary>
  private mytreedatacollection child = new mytreedatacollection();
  /// <summary>
  /// 數(shù)據(jù)對(duì)象
  /// </summary>
  public object tag = null;
  /// <summary>
  /// 名稱
  /// </summary>
  public string name = "";
  /// <summary>
  /// 父親
  /// </summary>
  public object parent = null;
  /// <summary>
  /// 添加子數(shù)據(jù)
  /// </summary>
  /// <param name="child">子數(shù)據(jù)</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>
  /// 查找父親數(shù)據(jù)
  /// </summary>
  /// <param name="child">子數(shù)據(jù)</param>
  /// <returns>父親數(shù)據(jù)或者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>
  /// 將子數(shù)據(jù)顯示到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>
  /// 遞歸顯示數(shù)據(jù)
  /// </summary>
  /// <param name="tn">節(jié)點(diǎn)</param>
  /// <param name="child">數(shù)據(jù)</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>
  /// 樹型節(jié)點(diǎn)集合類
  /// </summary>
  internal class mytreedatacollection : addcollectionbase
  {
   public mytreedatacollection()
   {
   }
    
   public mytreedata this[int index]
   {
    get
    {
     return (mytreedata)list[index];
    }
   }
  }
 }