无论是webform还是winform,TreeView都是常用功能。使用递归方法很方便。
下面分享一个小实例。
数据库中3个字段,分别是:ID,itemType_name,itemType_PID
private void itemType_Load(object sender, EventArgs e) { dataBind(); } private void dataBind() { //获取数据 string sql = "select * from itemType order by itemType_paixu"; DB db = new DB(); string _msg = ""; DataTable DT = db.GetDt(sql, out _msg); // treeView1.Nodes.Clear(); //添加顶节点 TreeNode tempNode = new TreeNode(); tempNode.Text = "商品类别"; tempNode.Name = "0"; treeView1.Nodes.Add(tempNode); // nodeBind(treeView1, DT, "0", tempNode); treeView1.ExpandAll(); // } public void nodeBind(TreeView _treeView, DataTable _dt, string _filter, TreeNode _pNode) { //循环构建树 string sFilter = "itemType_PID=" + _filter; TreeNode parentNode = _pNode; DataView dv = new DataView(_dt); dv.RowFilter = sFilter; if (dv.Count > 0) { foreach (DataRowView drv in dv) { TreeNode tempNode = new TreeNode(); tempNode.Text = drv["itemType_name"].ToString(); tempNode.Name = drv["ID"].ToString(); if (parentNode != null) parentNode.Nodes.Add(tempNode); else _treeView.Nodes.Add(tempNode); nodeBind(_treeView, _dt, drv["ID"].ToString(), tempNode); } } }
上面这个例子是有固定根节点的,下面这个例子是没有根节点的,递归构建更方便。
private void codeitem_Load(object sender, EventArgs e) { dataBind(); } private void dataBind() { //获取数据 string sql = "select * from codeitem order by codeitem_paixu"; DB db = new DB(); string _msg = ""; DataTable DT = db.GetDt(sql, out _msg); // treeView1.Nodes.Clear(); nodeBind(treeView1, DT, "0", null); treeView1.ExpandAll(); // } public void nodeBind(TreeView _treeView, DataTable _dt, string _filter, TreeNode _pNode) { //循环构建树 string sFilter = "codeitem_pcode=’" + _filter + "’"; TreeNode parentNode = _pNode; DataView dv = new DataView(_dt); dv.RowFilter = sFilter; if (dv.Count > 0) { foreach (DataRowView drv in dv) { TreeNode tempNode = new TreeNode(); tempNode.Text = drv["codeitem_name"].ToString(); tempNode.Name = drv["ID"].ToString(); if (parentNode != null) parentNode.Nodes.Add(tempNode); else _treeView.Nodes.Add(tempNode); nodeBind(_treeView, _dt, drv["codeitem_code"].ToString(), tempNode); } } }