怎样把数据库中的内容显示在treeview 中? 无需使用递归,使用简单的算法即可解决.使用一个hash表,记录tree节点即可.选创建每个节点,再进行遍例节点,在hash表中查找父节点.父子关系处理完后,把首节点加到treeview上即可.效率会比递归高. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建树:public void InitTree(TreeNodeCollection Nds,string parentId,DataTable dt){ dv=new DataView(); TreeNode tmpNd; string intId; dv.Table=dt; dv.RowFilter="ParentId=" + parentId ; foreach(DataRowView drv in dv) { tmpNd=new TreeNode(); tmpNd.Tag =drv[0].ToString(); tmpNd.Text=drv[2].ToString(); Nds.Add(tmpNd); intId=drv[1].ToString(); InitTree(tmpNd.Nodes,tmpNd.Tag.ToString(),ds,TableName); }}遍历树:public void GetAllNodeText(TreeNodeCollection tnc,string txt){ foreach (TreeNode node in tnc) { if( node.Nodes.Count != 0 ) GetAllNodeText(node.Nodes,txt); }}调用: myTree.InitTree(TreeView1.Nodes,"0",dataTable);注意这个:dv.RowFilter="ParentId=" + parentId ;ParentId就是父节点的ID,这里是字段名,最后要和你的对应上。我的表结构:id ParentID name 我有一个例子,不过我的例子中有一个总的root,然后实现递归调用。可以吗?private void CreateTreeNode(TreeNodeCollection newNodes,int parentID,DataSet ds) { try { DataView dv=new DataView(); dv.Table =ds.Tables["OrgInfo"]; dv.RowFilter="UpOrgID="+parentID.ToString(); foreach(DataRowView drv in dv)//循环遍历子组织,合并到记录中 { TreeNode tmpNd=new TreeNode(); int id=Convert.ToInt32(drv["OrgID"]); tmpNd.ID=id.ToString(); tmpNd.Text=drv["OrgName"].ToString(); newNodes.Add(tmpNd); CreateTreeNode(newNodes[newNodes.Count-1].Nodes,id,ds);//递归调用创建子组织 } } catch{} }我没有用部门级别字段,OrgID为组织ID,UpOrgID为父组织ID调用时CreateTreeNode(Treeview1.Nodes,UpOrgID,dsOrg); public void CreateNodesOfParent(string iParent,TreeNode pNode) { DataView dvwData = new DataView(this.dt.Tables[0]); if (iParent == null) { dvwData.RowFilter = "[ParentID] is null"; } else { dvwData.RowFilter = "[ParentID] = " +"'"+ iParent+"'"; } foreach(DataRowView Row in dvwData) { // Call Stack ! if(pNode == null) { TreeNode zNode = this.treeView1.Nodes.Add(Row["DeptName"].ToString()); zNode.Tag = Row["DeptID"].ToString(); CreateNodesOfParent((Row["DeptID"].ToString()),zNode); } else { TreeNode zNode = pNode.Nodes.Add(Row["DeptName"].ToString()); zNode.Tag = Row["DeptID"].ToString(); CreateNodesOfParent((Row["DeptID"].ToString()),zNode); } } } public void IniTree() { this.treeView1.BeginUpdate(); CreateNodesOfParent(null,0); this.treeView1.ExpandAll(); this.treeView1.EndUpdate(); } C#中循环添加 <li> 标签以及 li 里边的内容 双循环 SQL语句中如何可以使用变量作为Where条件 MergeAction属性用法菜鸟问题 急,急,急怎么将c#项目在别人的机子上运行??? C# 创建始终在前台的对话框 C#中如何触发控件的事件 请问.net程序怎么使用com的接口继承关系? C#.net的高手看过来了!如何得到本机网络流量? 菜鸟求救!!!!!! 我有一台服务器绑定了多个IP,请问怎样可以实现在代码中使用任意一个IP作为出口去访问(HttpWebRequest)其他的网站? 請問這句代碼是什麼意思?? 怎么让按钮不能获得焦点,马上给分!
public void InitTree(TreeNodeCollection Nds,string parentId,DataTable dt)
{
dv=new DataView();
TreeNode tmpNd;
string intId;
dv.Table=dt;
dv.RowFilter="ParentId=" + parentId ;
foreach(DataRowView drv in dv)
{
tmpNd=new TreeNode();
tmpNd.Tag =drv[0].ToString();
tmpNd.Text=drv[2].ToString();
Nds.Add(tmpNd);
intId=drv[1].ToString();
InitTree(tmpNd.Nodes,tmpNd.Tag.ToString(),ds,TableName);
}
}
遍历树:
public void GetAllNodeText(TreeNodeCollection tnc,string txt)
{
foreach (TreeNode node in tnc)
{
if( node.Nodes.Count != 0 )
GetAllNodeText(node.Nodes,txt);
}
}
调用:
myTree.InitTree(TreeView1.Nodes,"0",dataTable);注意这个:dv.RowFilter="ParentId=" + parentId ;ParentId就是父节点的ID,这里是字段名,最后要和你的对应上。
我的表结构:
id ParentID name
private void CreateTreeNode(TreeNodeCollection newNodes,int parentID,DataSet ds)
{
try
{
DataView dv=new DataView();
dv.Table =ds.Tables["OrgInfo"];
dv.RowFilter="UpOrgID="+parentID.ToString();
foreach(DataRowView drv in dv)//循环遍历子组织,合并到记录中
{
TreeNode tmpNd=new TreeNode();
int id=Convert.ToInt32(drv["OrgID"]);
tmpNd.ID=id.ToString();
tmpNd.Text=drv["OrgName"].ToString();
newNodes.Add(tmpNd);
CreateTreeNode(newNodes[newNodes.Count-1].Nodes,id,ds);//递归调用创建子组织
}
}
catch{}
}我没有用部门级别字段,OrgID为组织ID,UpOrgID为父组织ID调用时CreateTreeNode(Treeview1.Nodes,UpOrgID,dsOrg);
{
DataView dvwData = new DataView(this.dt.Tables[0]);
if (iParent == null)
{
dvwData.RowFilter = "[ParentID] is null";
}
else
{
dvwData.RowFilter = "[ParentID] = " +"'"+ iParent+"'";
}
foreach(DataRowView Row in dvwData)
{
// Call Stack !
if(pNode == null)
{
TreeNode zNode = this.treeView1.Nodes.Add(Row["DeptName"].ToString());
zNode.Tag = Row["DeptID"].ToString();
CreateNodesOfParent((Row["DeptID"].ToString()),zNode);
}
else
{
TreeNode zNode = pNode.Nodes.Add(Row["DeptName"].ToString());
zNode.Tag = Row["DeptID"].ToString();
CreateNodesOfParent((Row["DeptID"].ToString()),zNode);
}
}
}
public void IniTree()
{
this.treeView1.BeginUpdate();
CreateNodesOfParent(null,0);
this.treeView1.ExpandAll();
this.treeView1.EndUpdate();
}