数据库有一个表:
create table T_AREA (
ID char(32) not null,
CODE varchar(50) null,
NAME varchar(50) null,
PARENT_CODE varchar(50) null,
USER_COUNT int null,
INFO varchar(200) null,
constraint PK_T_AREA primary key (ID)
)这是一个区域表,其中父区域可以无限扩展子区域,即在表中每一个区域都存在一个父区域编码。问题是:在treeview中如何快速实现数据的展示?并且每一条记录都能绑定在一个treenode.tag中?求高手指点....
create table T_AREA (
ID char(32) not null,
CODE varchar(50) null,
NAME varchar(50) null,
PARENT_CODE varchar(50) null,
USER_COUNT int null,
INFO varchar(200) null,
constraint PK_T_AREA primary key (ID)
)这是一个区域表,其中父区域可以无限扩展子区域,即在表中每一个区域都存在一个父区域编码。问题是:在treeview中如何快速实现数据的展示?并且每一条记录都能绑定在一个treenode.tag中?求高手指点....
{
public string ID;
public string CODE;
public string NAME;
...
}将该表取出的数据转换成List<AreaNode> areaList;然后维护一个整理后的数据:List<AreaNode> arrangedNode;遍历所有AreaNode:
如果当前currentNode的父亲不在arrangedNode里,则arrangedNode.Add(currentNode),然后检查arrangedNode的已有节点中是否存在为currentNode的儿子节点的情况,如果存在:currentNode.Nodes.Add(childrenNode);
如果当前currentNode的父亲在arrangedNode里,则在arrangedNode找到其父亲节点parentNode,然后parentNode.Nodes.Add(currentNode);然后:
treeView.Nodes.Add(arrangedNode);
每个根节点遍历它的子区域编码
private void AddTreeNode(TreeNode node)
{
treeView1.Nodes.Add(node);
//查找数据库该节点是否还有子节点
//如果有获取所有的子编码
for(//) //对子编码作一个循环
{
AddTreeNode(子节点)
}
}
大致思路就是这样
{
private string id;
private string code;
private string name;
private string parentCode;
private string userCount;
private string info;
public string Id
{
get { return id; }
set { id = value; }
} public string Code
{
get { return code; }
set { code = value; }
} public new string Name
{
get { return name; }
set { name = value; }
} public string ParentCode
{
get { return parentCode; }
set { parentCode = value; }
} public string UserCount
{
get { return userCount; }
set { userCount = value; }
} public string Info
{
get { return info; }
set { info = value; }
}
} public class AreaHelper
{
public AreaNode ArrangeAreaNodes(List<AreaNode> areaNodes)
{
List<AreaNode> arrangedNodes = new List<AreaNode>(); foreach(AreaNode node in areaNodes)
{
AreaNode parent = getNode(arrangedNodes,node.ParentCode);
if(parent != null)
{
parent.Nodes.Add(node);
}
else
{
List<AreaNode> children = getChildrenNode(arrangedNodes, node.Code);
foreach(AreaNode child in children)
{
arrangedNodes.Remove(child);
node.Nodes.Add(child);
} arrangedNodes.Add(node);
}
} if(arrangedNodes.Count == 0) return null;
return arrangedNodes[0];
} private AreaNode getNode(List<AreaNode> areaNodes,string code)
{
foreach(AreaNode node in areaNodes)
{
if(node.Code == code)
{
return node;
}
} return null;
} private List<AreaNode> getChildrenNode(List<AreaNode> areaNodes, string code)
{
List<AreaNode> children = new List<AreaNode>();
foreach (AreaNode node in areaNodes)
{
if (node.ParentCode == code)
{
children.Add(node);
}
} return children;
}
} public class Program
{
static void Main()
{
TreeView tv = new TreeView();
List<AreaNode> nodeList = null; // from db AreaHelper helper = new AreaHelper();
tv.Nodes.Add(helper.ArrangeAreaNodes(nodeList));
}
}
{
this.myRegion = ExecuteSql("SELECT ID, CODE, NAME, PARENT_CODE, USER_COUNT FROM T_AREA"); DateTime dt = DateTime.Now;
trvXML.Nodes.Clear(); //trvXML为你的Treeview控件名
TreeNode trvboot = new TreeNode("CHINA");
trvXML.Nodes.Add(trvboot); BuildTree("SuperID=0", this.myRegion.Select("SuperID=0")[0], trvboot); //把SuperID改成你的父级ID,这里的0为最顶点ID值
trvXML.Nodes[0].Expand(); TimeSpan ts = DateTime.Now - dt;
string strInfor = string.Format("耗费时间:{0}:{1}:{2}.{3}",
ts.Hours.ToString().PadLeft(2,'0'),
ts.Minutes.ToString().PadLeft(2, '0'),
ts.Seconds.ToString().PadLeft(2, '0'),
ts.Milliseconds.ToString().PadLeft(3, '0'));
Console.WriteLine(strInfor);
} //使用递归创建 TreeView
private void BuildTree(string expression, DataRow drRow, TreeNode lstNode)
{
int superCount = this.myRegion.Select(expression).Length;
if (superCount > 0)
{
foreach (DataRow dr in this.myRegion.Select(expression))
{
string childExpress = string.Format("SuperID={0}", dr["ID"].ToString()); //把SuperID改成你的父级ID
if (this.myRegion.Select(childExpress).Length > 0)
{
TreeNode sublst = new TreeNode(dr["NAME"].ToString());
sublst.Tag = dr;
lstNode.Nodes.Add(sublst);
BuildTree(childExpress, dr, sublst);
}
else
{
BuildTree(childExpress, dr, lstNode);
}
}
}
else
{
TreeNode node = new TreeNode(drRow["NAME"].ToString());
node.Tag = drRow;
lstNode.Nodes.Add(node);
}
} 楼主自行试试, 我使用中国城乡表测试时, 运行时间不超过2秒。
private void trvXML_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node.Tag != null)
{
DataRow dr = e.Node.Tag as DataRow;
this.textBox1.Text = dr[0].ToString();
this.textBox2.Text = dr[1].ToString();
this.textBox3.Text = dr[2].ToString();
this.textBox4.Text = dr[3].ToString();
this.textBox5.Text = dr[4].ToString();
this.textBox6.Text = dr[5].ToString();
this.textBox7.Text = e.Node.FullPath; //显示当前路径
}
}
依次类推 在after_expend事件里写的添加每个节点的时候都对应的加一个tag给它,比如说Id,展开时候根据这个取它的子节点
//绑定父节点
private void initTree()
{
DataRow[] drs = dt.Select("ParentID=0", "ID asc");
for (int i = 0; i < drs.Length; i++)
{
TreeNode tn = new TreeNode(drs[i][1].ToString());
tn.SelectAction = TreeNodeSelectAction.Select;
tn.Expanded = false;
this.TreeView1.Nodes.Add(tn);
LoadTree(tn, Convert.ToInt32(drs[i][0]));
}
}
//绑定子区域
private void LoadTree(TreeNode tn, int parentid)
{
DataRow[] drs = dt.Select("ParentID=" + parentid, "ID asc");
for (int i = 0; i < drs.Length; i++)
{
TreeNode child = new TreeNode(drs[i][1].ToString());
tn.SelectAction = TreeNodeSelectAction.Select;
child.Expanded = false;
tn.ChildNodes.Add(child);
LoadTree(child, Convert.ToInt32(drs[i][0]));
}
}
node.Text = node.NAME;
node.Tag = node;
arrangedNodes.Add(node);
你从数据表中取数,返回List<AreaNode>,在这个处理里面,例如:
List<AreaNode> areaList = new List<AreaNode>();
SqlDataReader dataReader = null;
try
{
dataReader = .....;
while(dataReader.Read())
{
AreaNode area = new AreaNode();
area.Code = dataReader["CODE"].ToString();
area.Name = dataReader["NAME"].ToString();
... areaList.Add(area);
}return areaList;
{
catch(Exception ex)
{
....
}
finally
{
if(dataReader != null)
{
dataReader.Close();
dataReader.Dispose();
}
}....
area.Tag = dataReader["CODE"].ToString();另外,我直接敲的代码,catch(Exception ex)上面一行的"{"应该为"}"
{
DataSet ds = new DataSet();
DataTable dtb = ds.Tables[0];
TreeNode root = new TreeNode();
root.Value = "0";
root.Text = "";
root.ImageUrl = "../images/folder.gif";
root.Expanded = true;
this.TreeView1.Nodes.Add(root);
initTree(dtb, "", root);
this.TreeView1.ExpandAll();
} protected void initTree(DataTable dt, string nFatherid, TreeNode fatherNode)
{
DataView dv = new DataView(dt);
dv.RowFilter = "PARENT_CODE='"+nFatherid+"'";
foreach (DataRowView Row in dv)
{
TreeNode node = new TreeNode();
if(查询Row["BH"]是否有子项)
{
node.Value = Row["BH"].ToString();
node.Text = Row["mc"].ToString();
node.NavigateUrl = "";
node.ImageUrl = "../images/folder.gif";
fatherNode.ChildNodes.Add(node);
initTree(dt, Row["BH"].ToString(), node);
}
else
{
node.Text = Row["mc"].ToString();
node.Value = Row["BH"].ToString();
node.ImageUrl = "../images/jg.gif";
fatherNode.ChildNodes.Add(node);
}
}
}递归绑定数据。最好用实体类,通过属性判断
谢谢各位,其他的方法,就免费搜藏了!
准备结贴!
{
this.myRegion = ExecuteSql("SELECT ID, CODE, NAME, PARENT_CODE, USER_COUNT FROM T_AREA"); DateTime dt = DateTime.Now;
trvXML.Nodes.Clear(); //trvXML为你的Treeview控件名
TreeNode trvboot = new TreeNode("CHINA");
trvXML.Nodes.Add(trvboot); BuildTree("SuperID=0", this.myRegion.Select("SuperID=0")[0], trvboot); //把SuperID改成你的父级ID,这里的0为最顶点ID值
trvXML.Nodes[0].Expand(); TimeSpan ts = DateTime.Now - dt;
string strInfor = string.Format("耗费时间:{0}:{1}:{2}.{3}",
ts.Hours.ToString().PadLeft(2,'0'),
ts.Minutes.ToString().PadLeft(2, '0'),
ts.Seconds.ToString().PadLeft(2, '0'),
ts.Milliseconds.ToString().PadLeft(3, '0'));
Console.WriteLine(strInfor);
} //使用递归创建 TreeView
private void BuildTree(string expression, DataRow drRow, TreeNode lstNode)
{
int superCount = this.myRegion.Select(expression).Length;
if (superCount > 0)
{
foreach (DataRow dr in this.myRegion.Select(expression))
{
string childExpress = string.Format("SuperID={0}", dr["ID"].ToString()); //把SuperID改成你的父级ID
if (this.myRegion.Select(childExpress).Length > 0)
{
TreeNode sublst = new TreeNode(dr["NAME"].ToString());
sublst.Tag = dr;
lstNode.Nodes.Add(sublst);
BuildTree(childExpress, dr, sublst);
}
else
{
BuildTree(childExpress, dr, lstNode);
}
}
}
else
{
TreeNode node = new TreeNode(drRow["NAME"].ToString());
node.Tag = drRow;
lstNode.Nodes.Add(node);
}
} 很不错的方法,我就是这么作的实现了商品的无限分类的数据显示
private void initTree()
{
DataRow[] drs = dt.Select("ParentID=0", "ID asc");
for (int i = 0; i < drs.Length; i++)
{
TreeNode tn = new TreeNode(drs[i][1].ToString());
tn.SelectAction = TreeNodeSelectAction.Select;
tn.Expanded = false;
this.TreeView1.Nodes.Add(tn);
LoadTree(tn, Convert.ToInt32(drs[i][0]));
}
}
//绑定子区域
private void LoadTree(TreeNode tn, int parentid)
{
DataRow[] drs = dt.Select("ParentID=" + parentid, "ID asc");
for (int i = 0; i < drs.Length; i++)
{
TreeNode child = new TreeNode(drs[i][1].ToString());
tn.SelectAction = TreeNodeSelectAction.Select;
child.Expanded = false;
tn.ChildNodes.Add(child);
LoadTree(child, Convert.ToInt32(drs[i][0]));
}
}
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class Default2 : System.Web.UI.Page
{
public static string ConnStr;
protected void Page_Load(object sender, EventArgs e)
{
ConnStr = "Data Source=.;Initial Catalog=maoyi;user id=sa;pwd=13579-";// ConfigurationManager.ConnectionStrings["ConnDB"].ConnectionString;
SqlConnection connection = new SqlConnection(ConnStr);
connection.Open();
SqlCommand myCommand = new SqlCommand("select * from my_func", connection);
SqlDataAdapter da = new SqlDataAdapter(myCommand);
DataSet ds = new DataSet();
da.Fill(ds);
InitTree(TreeView1,ds);
}
public bool InitTree(TreeView treeview, DataSet ds)
{
treeview.Nodes.Clear();
ds.Relations.Add("NodeRelation", ds.Tables[0].Columns["FuncId"], ds.Tables[0].Columns["PFuncId"], false); foreach (DataRow dbRow in ds.Tables[0].Rows)
{
if (dbRow["PFuncId"].ToString() == "0" || dbRow.IsNull("PFuncId") || dbRow["PFuncId"].ToString() == "")
{
TreeNode newNode = CreateNode(dbRow["FuncName"].ToString(), dbRow["FuncId"].ToString(), dbRow["URL"].ToString());
treeview.Nodes.Add(newNode);
SubTree(dbRow, newNode);
}
}
treeview.ExpandAll();
return true;
}
private void SubTree(DataRow dbRow, TreeNode node)
{
foreach (DataRow childRow in dbRow.GetChildRows("NodeRelation"))
{
TreeNode childNode = CreateNode(childRow["FuncName"].ToString(), childRow["FuncId"].ToString(), childRow["URL"].ToString());
node.ChildNodes.Add(childNode);
SubTree(childRow, childNode);
}
} private TreeNode CreateNode(string text, string tag, string url)
{
TreeNode node = new TreeNode();
node.Text = text;
node.Value = tag;
node.SelectAction = TreeNodeSelectAction.None;
node.NavigateUrl = url;
return node;
}
}
System.Windows.Forms下面的treeviewprivate void button1_Click(object sender, EventArgs e)
{ TreeNode node = new TreeNode();
node.Text = text2.Text+" Ok";
node.Name = text2.Text;
TreeNode dd = find(treeView1, text1.Text); if (dd != null)
{
dd.Nodes.Add(node);
}
}
private TreeNode find(TreeView v, string s)
{
foreach (TreeNode no in v.Nodes)
{
if (no.Name == s)
return no;
else
return can(no, s); } return null;
}
private TreeNode can(TreeNode no, string s)
{
foreach (TreeNode node in no.Nodes)
{
if (node.Name== s)
return node;
else if (node.Nodes.Count > 0)
return can(node, s);
}
return null;
}System.Web.UI.WebControls下的treeview: protected void Add_Click(object sender, EventArgs e)
{
TreeNode node = new TreeNode();
node.Text = text2.Text+" Ko";
node.Value = text2.Text;
TreeNode dd = find(TreeView1, text1.Text);
if (dd != null)
{ dd.ChildNodes.Add(node);
} } private TreeNode find(TreeView v, string s)
{
foreach (TreeNode no in v.Nodes)
{
if (no.Value == s)
return no;
else
return can(no, s); } return null;
}
private TreeNode can(TreeNode no, string s)
{
foreach (TreeNode node in no.ChildNodes)
{
if (node.Value == s)
return node;
else if (node.ChildNodes.Count > 0)
return can(node, s);
}
return null;
}两个程序思路是一样的,在不同的namespace下treeview的封装是不同的。
用此程序之前treeview已经有一个root node.
平时没太学SQL
UP!
1.有一个方法中提到:
BuildTree("SuperID=0", this.myRegion.Select("SuperID=0")[0], trvboot); //把SuperID改成你的父级ID,这里的0为最顶点ID值 这一段是什么意思?具体我的应用怎么改?PARENT_ID =????2.还有:lovvver 的方法有问题,到第四级就出错了,如何改?
但是可以确定的是,思路是不会有问题的。
public class AreaHelper
{
public T_AREA ArrangeAreaNodes(List<T_AREA> areaNodes)
{
List<T_AREA> arrangedNodes = new List<T_AREA>(); foreach (T_AREA node in areaNodes)
{
node.Text = node.NAME;
node.Tag = node;
T_AREA parent = getNode(arrangedNodes, node.PARENT_ID);
if (parent != null)
{
parent.Nodes.Add(node);
}
else
{
List<T_AREA> children = getChildrenNode(arrangedNodes, node.ID);
foreach (T_AREA child in children)
{
arrangedNodes.Remove(child);
node.Nodes.Add(child);
}
arrangedNodes.Add(node);
}
} if (arrangedNodes.Count == 0) return null;
return arrangedNodes[0] ;
} private T_AREA getNode(List<T_AREA> areaNodes, string id)
{
foreach (T_AREA node in areaNodes)
{
if (node.ID == id)
{
return node;
}
} return null;
} private List<T_AREA> getChildrenNode(List<T_AREA> areaNodes, string id)
{
List<T_AREA> children = new List<T_AREA>();
foreach (T_AREA node in areaNodes)
{
if (node.PARENT_ID == id)
{
children.Add(node);
}
} return children;
} }调用地方: Area area = new Area();
//生成资源树
List<T_AREA> nodeList = area.GetAllModel(); // from db AreaHelper helper = new AreaHelper();
this.area_tv.Nodes.Add(helper.ArrangeAreaNodes(nodeList));
this.area_tv.ExpandAll();
"这是一个区域表,其中父区域可以无限扩展子区域,即在表中每一个区域都存在一个父区域编码。 "
SuperID 就是你区域表中的父区域的ID值,我不知道你这个区域表的父区域是哪一个字段,所以用了SuperID代替了。这样吧,我把我的中国城乡表结构给你看一个就明白了:
ChinaRegion](
[AreaID] [int] not NULL, --行政区序号
[SuperID] [int] NOT NULL, --上级行政区序号,其中0:无上级行政区(省份或直辖市)
[AreaName] [varchar](50) NULL, --行政区名称
[GbCode] [char](6) NULL, --6位国标行政区编码
[AreaClass] [char](1) NULL, --B:省/直辖市;C-市/行政区;D-县/城乡
)那么这里, 每一个行政区均有序号,当SuperID为0时, 即表示其无上级行政区, 所以 0 必定为整个表数据的顶点了。
DataTable myRegion;
string pid = "00000000000000000000000000000000"; private void button1_Click(object sender, EventArgs e)
{
DataSet ds = GetAllArea();
myRegion = ds.Tables[0]; tv.Nodes.Clear(); //trvXML为你的Treeview控件名
TreeNode trvboot = new TreeNode("花园小区");
DataRow dr = myRegion.Rows.Add();
dr["CODE"] = "888";
dr["PARENT_ID"] = pid;
dr["ID"] = pid;
dr["USER_COUNT"] = -1;
trvboot.Tag = dr;
tv.Nodes.Add(trvboot); BuildTree("PARENT_ID="+pid, this.myRegion.Select("PARENT_ID=" + pid)[0], trvboot); //把SuperID改成你的父级ID,这里的0为最顶点ID值
tv.Nodes[0].Expand(); } public DataSet GetAllArea()
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select ID,CODE,NAME,PARENT_ID,USER_COUNT,INFO from T_AREA "); DataSet ds = DBFacade.ExecuteDataSet(strSql.ToString());
return ds;
} //使用递归创建 TreeView
private void BuildTree(string expression, DataRow drRow, TreeNode lstNode)
{
int superCount = this.myRegion.Select(expression).Length;
if (superCount > 0)
{
foreach (DataRow dr in this.myRegion.Select(expression))
{
string childExpress = string.Format("PARENT_ID={"+pid+"}", dr["ID"].ToString()); //把SuperID改成你的父级ID
if (this.myRegion.Select(childExpress).Length > 0)
{
TreeNode sublst = new TreeNode(dr["NAME"].ToString());
sublst.Tag = dr;
lstNode.Nodes.Add(sublst);
BuildTree(childExpress, dr, sublst);
}
else
{
BuildTree(childExpress, dr, lstNode);
}
}
}
else
{
TreeNode node = new TreeNode(drRow["NAME"].ToString());
node.Tag = drRow;
lstNode.Nodes.Add(node);
}
改成:
BuildTree("PARENT_ID='"+pid+"'", this.myRegion.Select("PARENT_ID='" + pid+"'")[0], trvboot);
string childExpress = string.Format("PARENT_ID={"+pid+"}", dr["ID"].ToString());
改成:
string childExpress = string.Format("PARENT_ID='"+pid+"'", dr["ID"].ToString()); 这样就行了。
string childExpress = string.Format("PARENT_ID='{0}'", dr["ID"].ToString()); 这里的 {0} 表示的是 dr["ID"].ToString() 值, 楼主写成 {"+pid+"}" , 把我与弄糊涂了。 呵呵。
还是报错:
未处理的“System.StackOverflowException”类型的异常出现在 mscorlib.dll 中。
在处理时:
if (this.myRegion.Select(childExpress).Length > 0)
public class AreaNode : TreeNode
{
private string id;
private string code;
private string name;
private string parentCode;
private string userCount;
private string info;
public string Id
{
get { return id; }
set { id = value; }
} public string Code
{
get { return code; }
set { code = value; }
} public new string Name
{
get { return name; }
set { name = value; }
} public string ParentCode
{
get { return parentCode; }
set { parentCode = value; }
} public string UserCount
{
get { return userCount; }
set { userCount = value; }
} public string Info
{
get { return info; }
set { info = value; }
}
} public class AreaHelper
{
public AreaNode ArrangeAreaNodes(List<AreaNode> areaNodes)
{
List<AreaNode> arrangedNodes = new List<AreaNode>(); foreach (AreaNode node in areaNodes)
{
List<AreaNode> children = getChildrenNode(arrangedNodes, node.Code);
foreach (AreaNode child in children)
{
arrangedNodes.Remove(child);
node.Nodes.Add(child);
} AreaNode parent = getNode(arrangedNodes, node.ParentCode);
if (parent != null)
{
parent.Nodes.Add(node);
}
else
{
arrangedNodes.Add(node);
}
} if (arrangedNodes.Count == 0) return null;
return arrangedNodes[0];
} private static AreaNode getNode(ICollection<AreaNode> areaNodes, string code)
{
if(areaNodes == null || areaNodes.Count == 0 || code == null) return null; foreach (AreaNode node in areaNodes)
{
if (node.Code == code)
{
return node;
} foreach(AreaNode child in node.Nodes)
{
return getNodeInner(child, code);
}
} return null;
} private static AreaNode getNodeInner(AreaNode node,string code)
{
if(node == null || code == null) return null; if(node.Code == code) return node;
foreach(AreaNode child in node.Nodes)
{
AreaNode an = getNodeInner(child, code);
if(an != null) return an;
} return null;
} private static List<AreaNode> getChildrenNode(IEnumerable<AreaNode> areaNodes, string code)
{
List<AreaNode> children = new List<AreaNode>();
foreach (AreaNode node in areaNodes)
{
if (node.ParentCode == code)
{
children.Add(node);
}
} return children;
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
List<AreaNode> areaList = new List<AreaNode>();
AreaNode root = new AreaNode();
root.Id = "1";
root.Code = "1";
root.Name = "root";
root.Text = "root";
root.ParentCode = "-1";
root.Info = "xxxxx";
root.UserCount = "2"; areaList.Add(root); //add 2 children for root
for (int i = 0; i < 2; i++)
{
AreaNode node = new AreaNode();
node.Id = string.Format("1{0}", i + 1);
node.Code = string.Format("1{0}", i + 1);
node.Name = string.Format("Node{0}", i + 1);
node.Text = string.Format("Node{0}", i + 1);
node.ParentCode = "1";
node.Info = "ffff";
node.UserCount = "2"; areaList.Add(node);
} //add 2 children for Node1
for (int i = 0; i < 3; i++)
{
AreaNode node = new AreaNode();
node.Id = string.Format("11{0}", i + 1);
node.Code = string.Format("11{0}", i + 1);
node.Name = string.Format("Node1{0}", i + 1);
node.Text = string.Format("Node1{0}", i + 1);
node.ParentCode = "11";
node.Info = "ffff";
node.UserCount = "2"; areaList.Add(node);
} for (int i = 0; i < 3; i++)
{
AreaNode node = new AreaNode();
node.Id = string.Format("111{0}", i + 1);
node.Code = string.Format("111{0}", i + 1);
node.Name = string.Format("Node11{0}", i + 1);
node.Text = string.Format("Node11{0}", i + 1);
node.ParentCode = "111";
node.Info = "ffff";
node.UserCount = "2"; areaList.Add(node);
} for (int i = 0; i < 3; i++)
{
AreaNode node = new AreaNode();
node.Id = string.Format("1111{0}", i + 1);
node.Code = string.Format("1111{0}", i + 1);
node.Name = string.Format("Node111{0}", i + 1);
node.Text = string.Format("Node111{0}", i + 1);
node.ParentCode = "1111";
node.Info = "ffff";
node.UserCount = "2"; areaList.Add(node);
} for (int i = 0; i < 3; i++)
{
AreaNode node = new AreaNode();
node.Id = string.Format("11111{0}", i + 1);
node.Code = string.Format("11111{0}", i + 1);
node.Name = string.Format("Node1111{0}", i + 1);
node.Text = string.Format("Node1111{0}", i + 1);
node.ParentCode = "11111";
node.Info = "ffff";
node.UserCount = "2"; areaList.Add(node);
} AreaHelper helper = new AreaHelper();
AreaNode nodes = helper.ArrangeAreaNodes(areaList);
treeView1.Nodes.Add(nodes);
treeView1.ExpandAll();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
root
- Node1
- Node11
- Node111
- Node1111
- Node11111
- Node11112
- Node11113
- Node1112
- Node1113
- Node112
- Node113
- Node12
- Node13
- Node2