用TreeView显示数据通用方法

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);
}

///

1<summary>   
2/// 树型节点数据类   
3/// </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;
}

///

1<summary>   
2/// 子数据集合   
3/// </summary>

private myTreeDataCollection Child = new myTreeDataCollection();

///

1<summary>   
2/// 数据对象   
3/// </summary>

public object Tag = null;

///

1<summary>   
2/// 名称   
3/// </summary>

public string Name = "";

///

1<summary>   
2/// 父亲   
3/// </summary>

public object Parent = null;

///

1<summary>   
2/// 添加子数据   
3/// </summary>

///

1<param name="child"/>

子数据
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);
}
}

///

1<summary>   
2/// 查找父亲数据   
3/// </summary>

///

1<param name="child"/>

子数据
///

1<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;
}

///

1<summary>   
2/// 将子数据显示到TreeView   
3/// </summary>

///

1<param name="tv"/>

TreeView
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]);
}
}

///

1<summary>   
2/// 递归显示数据   
3/// </summary>

///

1<param name="tn"/>

节点
///

1<param name="child"/>

数据
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]);
}
}

///

1<summary>   
2/// 树型节点集合类   
3/// </summary>

internal class myTreeDataCollection : AddCollectionBase
{
public myTreeDataCollection()
{
}

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

}
}
}
}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus