public class NodeTag
{
public int id;
public string name;
public int parentId;
public int level; public NodeTag(int _id, string _name, int _parentId, int _level)
{
this.id = _id;
this.name = _name;
this.parentId = _parentId;
this.level = _level;
}
} private void button2_Click(object sender, EventArgs e)
{
/*
目前表里有4个列
ID 名称 ParentId Level
1 省 1 0
2 市 1 1
3 区 2 2
4 区 2 2
5 市 1 1
*/
NodeTag tag1 = new NodeTag(1, "LiaoNing", 0, 0);
AddNode(tag1); NodeTag tag2 = new NodeTag(2, "ShenYang", 1, 1);
AddNode(tag2); NodeTag tag3 = new NodeTag(3, "DaDong", 2, 2);
AddNode(tag3);
NodeTag tag4 = new NodeTag(4, "TieXi", 2, 2);
AddNode(tag4);
NodeTag tag5 = new NodeTag(5, "DaLian", 1, 1);
AddNode(tag5); NodeTag tag6 = new NodeTag(6, "XinMin", 5, 3);
AddNode(tag6); treeView1.ExpandAll(); } private TreeNode FindNodeById(int id)
{
return FindNodeById(id, treeView1.Nodes);
} private TreeNode FindNodeById(int id, TreeNodeCollection nodes)
{
NodeTag tag;
foreach (TreeNode node in nodes)
{
tag = node.Tag as NodeTag;
if (tag.id == id)
return node;
else
return FindNodeById(id, node.Nodes);
} return null;
} private void AddNode(NodeTag tag)
{
int parentId = tag.parentId;
TreeNode newNode = new TreeNode(tag.name);
newNode.Tag = tag; if (parentId == 0)
{
treeView1.Nodes.Add(newNode);
}
else
{
TreeNode parentNode = FindNodeById(parentId);
if (parentNode != null)
{
parentNode.Nodes.Add(newNode);
}
}
}这样写XinMin会显示不出来,请问如何能让XinMin显示在DaLian的下面呢?
{
public int id;
public string name;
public int parentId;
public int level; public NodeTag(int _id, string _name, int _parentId, int _level)
{
this.id = _id;
this.name = _name;
this.parentId = _parentId;
this.level = _level;
}
} private void button2_Click(object sender, EventArgs e)
{
/*
目前表里有4个列
ID 名称 ParentId Level
1 省 1 0
2 市 1 1
3 区 2 2
4 区 2 2
5 市 1 1
*/
NodeTag tag1 = new NodeTag(1, "LiaoNing", 0, 0);
AddNode(tag1); NodeTag tag2 = new NodeTag(2, "ShenYang", 1, 1);
AddNode(tag2); NodeTag tag3 = new NodeTag(3, "DaDong", 2, 2);
AddNode(tag3);
NodeTag tag4 = new NodeTag(4, "TieXi", 2, 2);
AddNode(tag4);
NodeTag tag5 = new NodeTag(5, "DaLian", 1, 1);
AddNode(tag5); NodeTag tag6 = new NodeTag(6, "XinMin", 5, 3);
AddNode(tag6); treeView1.ExpandAll(); } private TreeNode FindNodeById(int id)
{
return FindNodeById(id, treeView1.Nodes);
} private TreeNode FindNodeById(int id, TreeNodeCollection nodes)
{
NodeTag tag;
foreach (TreeNode node in nodes)
{
tag = node.Tag as NodeTag;
if (tag.id == id)
return node;
else
return FindNodeById(id, node.Nodes);
} return null;
} private void AddNode(NodeTag tag)
{
int parentId = tag.parentId;
TreeNode newNode = new TreeNode(tag.name);
newNode.Tag = tag; if (parentId == 0)
{
treeView1.Nodes.Add(newNode);
}
else
{
TreeNode parentNode = FindNodeById(parentId);
if (parentNode != null)
{
parentNode.Nodes.Add(newNode);
}
}
}这样写XinMin会显示不出来,请问如何能让XinMin显示在DaLian的下面呢?
这个帖子我已经回答了。
AddNode(tag6);只显示了前五条,如果把XinMin放在第一个市节点ShenYang下市可以的,但是放在第二个市节点下就会显示不出来。
NodeTag tag2 = new NodeTag(2, "ShenYang", 1, 1);
NodeTag tag3 = new NodeTag(3, "DaDong", 2, 2);
NodeTag tag4 = new NodeTag(4, "TieXi", 2, 2);
NodeTag tag5 = new NodeTag(5, "DaLian", 1, 1);
NodeTag tag6 = new NodeTag(6, "XinMin", 5, 3);
List<NodeTag> lst = new List<NodeTag>();
lst.Add(tag1);
lst.Add(tag2);
lst.Add(tag3);
lst.Add(tag4);
lst.Add(tag5);
lst.Add(tag6);
BindingTree(null, null, lst);
treeView1.ExpandAll();private void BindingTree(TreeNode tn, NodeTag nt, List<NodeTag> lst)
{
List<NodeTag> lstp;
if (tn == null)
{
lstp = lst.FindAll(
delegate(NodeTag ntfind)
{
return ntfind.parentId == 0;
});
}
else
{
lstp = lst.FindAll(
delegate(NodeTag ntfind)
{
return ntfind.parentId == nt.id;
});
}
for (int i = 0; i < lstp.Count; i++)
{
TreeNode tnNew = new TreeNode();
tnNew.Text = lstp[i].name;
if (tn == null)
{ treeView1.Nodes.Add(tnNew);
}
else
{
tn.Nodes.Add(tnNew);
}
BindingTree(tnNew, lstp[i], lst);
}
}
目前表里有4个列
ID 名称 ParentId Level
1 省 1 0
2 市 1 1
3 区 2 2
4 区 2 2
5 市 1 1
6 区 5 2
7 街 6 3
你写的这个好像没有用到 Level这一列吧?请问如果是这样的库我应该如何写呢?高手帮忙看看。
省最高成0,以此类推市1区2街路3等等无限向下类推。
NodeTag tag1 = new NodeTag(1, "LiaoNing", 0, 0);
NodeTag tag2 = new NodeTag(2, "ShenYang", 1, 1);
NodeTag tag3 = new NodeTag(3, "DaDong", 2, 2);
NodeTag tag4 = new NodeTag(4, "TieXi", 2, 2);
NodeTag tag5 = new NodeTag(5, "DaLian", 1, 1);
NodeTag tag6 = new NodeTag(6, "XinMin", 5, 3);
List<NodeTag> lst = new List<NodeTag>();
lst.Add(tag1);
lst.Add(tag2);
lst.Add(tag3);
lst.Add(tag4);
lst.Add(tag5);
lst.Add(tag6);
BindingTree(null, null, lst);
treeView1.ExpandAll();
写成从数据库中读取呢?
然后List<NodeTag> lst = new List<NodeTag>();
foreach(DataRow row in ds.Tables[0].Rows)
{
NodeTag o=new NodeTag();
o.ID= row["ID"].ToString();
...省略
lst.Add(o);
}
DataSet ds = null;
ds = DalAddress.GetAllAddress("ModAddress");
List<NodeTag> lst = new List<NodeTag>();
foreach (DataRow row in ds.Tables[0].Rows)
{
NodeTag o = new NodeTag(Convert.ToInt32(row["AddressID"].ToString()), row["Address"].ToString(), Convert.ToInt32(row["ParentID"].ToString()), Convert.ToInt32(row["Level"].ToString()));
o.id = Convert.ToInt32(row["AddressID"].ToString());
o.name = row["Address"].ToString();
o.parentId = Convert.ToInt32(row["ParentID"].ToString());
o.level = Convert.ToInt32(row["Level"].ToString());
lst.Add(o);
}
treeView1.ExpandAll();请看看我这里有写错的地方吗?