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>
/// 树型节点数据类
/// </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];
}
}
}
}