高散分---关于treeView和数据库绑定的问题 我的想法是tabel1绑定到treeview,单击节点的时候再根据typeid在table2中加入相应的项,动态的加子节点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 思路1、取出第一个表数据, 遍历整个个表,每条记录在根节点下对应建一个节点(在每个节点下建一个空节点,目的就是节点前有“+”,可以展开)2、AfterCollapse事件中,先删除此节点下所有节点, 然后根据typeid到第二个表中取出对应数据, 遍历整个个表,每条记录在点击的节点下对应建一个节点。 public void InitTree(TreeNodeCollection Nds,string parentId,DataSet ds) { //从根节点开始递归调用显示子树 dv=new DataView(); TreeNode tmpNd; string intId; dv.Table=ds.Tables["department"]; dv.RowFilter="ParentId=" + parentId ; foreach(DataRowView drv in dv) { //递归算法从这里开始,主要思想是深度遍历。 tmpNd=new TreeNode(); tmpNd.Tag =drv["DepID"].ToString(); tmpNd.Text=drv["Name"].ToString(); Nds.Add(tmpNd); intId=drv["ParentId"].ToString(); InitTree(tmpNd.Nodes,tmpNd.Tag.ToString(),ds); } } public void AddNode(string DepID,string txt,TreeNode SelNode) { TreeNode NewNode = new TreeNode(); NewNode.Text = txt; NewNode.Tag = DepID; SelNode.Nodes.Add(NewNode); } public void GetAllNodeText(TreeNodeCollection tnc,string txt) { //遍历树,得到树上每个节点的text foreach (TreeNode node in tnc) { if( node.Nodes.Count != 0 ) GetAllNodeText(node.Nodes,txt); } } 忘了说一句:表结构:ID ParentID Name100001 0 a100002 0 b100003 100001 c100004 100001 d100005 100002 e依次类推 用两个循环:外:读取主表的纪录,将其加到treeView的根节点下。内:在读取主表记录时,根据子表的外健读取子表纪录(有记录就读取,没有纪录则跳到外循环的下一个),并将其加到此级节点下。 http://expert.csdn.net/Expert/topic/1994/1994918.xml?temp=7.259768E-02 建立一个视图,将两个表UNION起来,一棵树要有recordid,text,fatherid,这三个字段即可以形成级联关系.用递归调用完成添加子节点.这样的代码就不用说了吧.到处都是了. c#窗体间传递数据库值 DataTable C# VS2005怎么为程序添加多个图标? 给别人做一个局域网项目,可是客户的电脑没安装数据库也不想安装数据库该怎么办呢? 关于监视获取文件打开的动作 去掉复选框checkboxlist 字 虚线框问题? C#引用VC的ocx控件,当修改ocx控件后,C#无法找到,怎么解决?高手指点! Datatable和dataset的问题 初级问题 ,索引器 关于系统用户名 求助,用JS方法操作SQL数据库时出现了问题 快学不下去了!苦啊!! 使用Web Browser,如何打开word文档,就像IE打开那样。
1、取出第一个表数据,
遍历整个个表,每条记录在根节点下对应建一个节点
(在每个节点下建一个空节点,目的就是节点前有“+”,可以展开)
2、AfterCollapse事件中,先删除此节点下所有节点,
然后根据typeid到第二个表中取出对应数据,
遍历整个个表,每条记录在点击的节点下对应建一个节点。
{ //从根节点开始递归调用显示子树
dv=new DataView();
TreeNode tmpNd;
string intId;
dv.Table=ds.Tables["department"];
dv.RowFilter="ParentId=" + parentId ;
foreach(DataRowView drv in dv)
{ //递归算法从这里开始,主要思想是深度遍历。
tmpNd=new TreeNode();
tmpNd.Tag =drv["DepID"].ToString();
tmpNd.Text=drv["Name"].ToString();
Nds.Add(tmpNd);
intId=drv["ParentId"].ToString();
InitTree(tmpNd.Nodes,tmpNd.Tag.ToString(),ds);
}
}
public void AddNode(string DepID,string txt,TreeNode SelNode)
{
TreeNode NewNode = new TreeNode();
NewNode.Text = txt;
NewNode.Tag = DepID;
SelNode.Nodes.Add(NewNode);
}
public void GetAllNodeText(TreeNodeCollection tnc,string txt)
{ //遍历树,得到树上每个节点的text
foreach (TreeNode node in tnc)
{
if( node.Nodes.Count != 0 )
GetAllNodeText(node.Nodes,txt);
}
}
表结构:
ID ParentID Name
100001 0 a
100002 0 b
100003 100001 c
100004 100001 d
100005 100002 e
依次类推
外:读取主表的纪录,将其加到treeView的根节点下。
内:在读取主表记录时,根据子表的外健读取子表纪录(有记录就读取,没有纪录则跳到外循环的下一个),并将其加到此级节点下。