Tabel数据转换成TreeView
详解:
方法
public void GetTreeViewModel() { CityModle rtn = null; // ID string id; //名称 string name; //父节点全名 string pname; //父节点ID string pid; string sql = "SELECT [id],[name],[pid],[pname] FROM [Test].[dbo].[city]"; SqlDataReader dr = null; dr = DBHelper.GetReader(sql);
Dictionary<string, CityModle> cityDic = new Dictionary<string, CityModle>(); //遍历数据源 整理数据并放在 Dictionary中 while (dr.Read()) { id = dr["id"].ToString(); name = dr["name"].ToString(); pid = dr["pid"].ToString(); pname = dr["pname"].ToString(); CityModle city = new CityModle(id, name, pid, pname); cityDic.Add(id, city); } foreach (KeyValuePair<string, CityModle> tmp in cityDic) //遍历dictionary要使用KeyValuePair. 将Node链接成Tree. { if (cityDic.ContainsKey(tmp.Value.Pid)) { cityDic[tmp.Value.Pid].Add(tmp.Value); } if (tmp.Value.Pid == "10") //判断根节点,要根据实际的数据判断 { rtn = tmp.Value; } } this.treeView1.Nodes.Add(rtn.TreeNode); }
//使用到的Model
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace Test { class CityModle { private string id; private string name; private string pid; private string pname; private TreeNode node; public TreeNode TreeNode { get { return this.node; } } public string Id { get { return id; } set { id = value; } } public string Name { get { return name; } set { name = value; } } public string Pid { get { return pid; } set { pid = value; } } public string Pname { get { return pname; } set { pname = value; } } //构造函数 public CityModle(string id, string name, string pid ,string pname) { this.Id = id; this.Name = name; this.Pid = pid; this.Pname = pname; this.node = new TreeNode(); this.node.Text = this.name; } public bool Add(CityModle item) //主要方法 { if (this.Id.Equals(item.Pid)) { this.node.Nodes.Add(item.TreeNode); return true; } else { return false; } } } }
public TreeNode GetRuibetsu()
{
return OledbHelper.GetWPSFTreeModel(WPSF1Sql.RuibetsuSelect, WPSF1Sql.RuibetsuName).TreeNode;
}
public static WPSFTreeModel GetWPSFTreeModel(string mdx, string titleName = null)
{ //WPSFTreeModel 为自定义的一个Model
WPSFTreeModel rtn = null;
取得数据
OleDbDataReader reader = GetReader(mdx);
//名称(缩写,可能重名)
string name;
//全名(唯一性,不能重名)
string unique;
//父节点全名(唯一性)
string parentUnique;
Dictionary<string, WPSFTreeModel> modelDic = new Dictionary<string, WPSFTreeModel>();
//遍历数据源
while (reader.Read())
{
name = reader.GetValue["列名"].ToString();
unique = reader.GetValue["列名"].ToString();
parentUnique = reader.GetValue["列名"].ToString();
WPSFTreeModel item = new WPSFTreeModel(name, unique, parentUnique);
if (modelDic.ContainsKey(unique))
{
modelDic[unique] = item;
}
else
{
modelDic.Add(unique, item);
}
if (modelDic.ContainsKey(parentUnique))
{
modelDic[parentUnique].Add(item);
}
else
{
modelDic.Add(parentUnique, null);//error?
}
if (string.IsNullOrEmpty(parentUnique))
{
rtn = item;
}
}
if (!string.IsNullOrEmpty(titleName))
{
rtn.TreeNode.Text = titleName;
}
rtn.TreeNode.CollapseAll();
return rtn;
}
//自定义Model
public class WPSFTreeModel
{
//构造函数
public WPSFTreeModel(string name,string unique,string parentUnique)
{
this.name = name;
this.unique = unique;
this.parentUnique = parentUnique;
this.node = new TreeNode(); ;
this.node.SelectAction = TreeNodeSelectAction.None;
this.node.Text = this.name;
this.node.Value = this.name;
}
private string name;
public string Name
{
get
{
return this.name;
}
}
private string unique;
public string Unique
{
get
{
return this.unique;
}
}
private string parentUnique;
public string ParentUnique
{
get
{
return this.parentUnique;
}
}
private TreeNode node;
public TreeNode TreeNode
{
get
{
return this.node;
}
}
//这个属性可以不要
private List<WPSFTreeModel> list;
public List<WPSFTreeModel> List
{
get
{
return this.list;
}
}
//这个方法可以不要
public void ClearList()
{
this.list = null;
}
//添加子节点
public bool Add(WPSFTreeModel item)
{
if(this.list==null)
{
this.list = new List<WPSFTreeModel>();
}
//上面的可以不要
if(this.unique.Equals( item.parentUnique))
{
this.list.Add(item);
this.node.ChildNodes.Add(item.TreeNode);
return true;
}
else
{
return false;
}
}
//这个方法可以不要
private void AddRange(List<WPSFTreeModel> list)
{
if (this.list == null)
{
this.list = new List<WPSFTreeModel>();
}
this.list.AddRange(list);
}
}