数据库格式是这样:
id name father_id
1 aaa 0
2 bbb 0
3 ccc 1
4 ddd 3
5 eee 2
想生成这种树结构:
aaa
ccc
ddd
bbb
eee
想用一个递归调用的方法完成
id name father_id
1 aaa 0
2 bbb 0
3 ccc 1
4 ddd 3
5 eee 2
想生成这种树结构:
aaa
ccc
ddd
bbb
eee
想用一个递归调用的方法完成
解决方案 »
- 怎么调用二级标题
- 如何使table位于窗体的正中(左右居中, 上下也要居中)
- ajax.net updatepanel支持框架吗?
- JS判断问题!请大伙来帮这看看!
- ajax javascript 调用后台一个数组函数 ,数组函数要带个参数,大虾来帮忙看下?
- 用aspx文件获取 .asp文件Response.redirect重定向后的URL
- 关于INCLUDE的问题
- EVAL 如何防止 脚本注入
- 为什么我就是使用帮助里面的DataGrid分页的例子,还是有错阿---快帮看看阿
- 我准备买《vb.net高级编程》和《asp.net入门经典-vb.net篇》两本书,同时配合联机帮助MSDN,开始全面的学习.net。有一年的vb和半年的asp
- 换行效果出不来,如何解决?
- StreamWriter写文件时怎样才能将原来的内容清除
http://community.csdn.net/Expert/topic/2863/2863032.xml?temp=.3794519
{
nodeid = reader.GetInt32(0);
parentid = reader.GetValue(2).ToString();
Nodetxt = reader.GetString(1);
NodeUrl = reader.GetValue(3).ToString();
countid = TreeView1.Nodes.Count;
for(i=0;i<countid;i++)
{
ParentNode = tree.getParentNode(parentid,TreeView1.Nodes[i]);
if(ParentNode!=null)
{
returnbool = tree.AddNode(Nodetxt,nodeid,NodeUrl,ParentNode,false,"main",false,false);
break;
}
else
{
//Response.Write(Nodetxt+"<br>");
}
}
} //找到父节点
public TreeNode getParentNode(string parentID,TreeNode node)
{
//Response.Write(node.Text+"->"+parentID + "==" + node.Type + "<br>"); if(node.Type.ToString()==parentID)
{
return node;
}
int i,j;
int len = node.Nodes.Count;
int len1;
//bool tempbool;
for(i=0;i<len;i++)
{
if(node.Nodes[i].Type==parentID.ToString())
{
//Response.Write("循环中:"+node.Nodes[i].Text+"||"+node.Nodes[i].Type+"<br>");
return node.Nodes[i];
}
else
{
len1 = node.Nodes[i].Nodes.Count;
if(len1>0)
{
//tempbool = getParentNode(parentID,node.Nodes[i]);
if(getParentNode(parentID,node.Nodes[i])!=null)
{
return getParentNode(parentID,node.Nodes[i]);
} }
} } return null;
} //添加子节点
public bool AddNode(string NodeName,int NodeID,string NodeURL,TreeNode parentNode,bool checkboxstyle,string targetid,bool ischecked,bool nodeExpand)
{
try
{
//Response.Write(parentNode.Type+"<br>");
TreeNode ChildNode = new TreeNode();
ChildNode.ExpandedImageUrl = "icon/Open.ico";
ChildNode.ImageUrl = "icon/close.ico";
ChildNode.SelectedImageUrl = "icon/Subscription.ico";
ChildNode.CheckBox = checkboxstyle;
ChildNode.Text = NodeName;
ChildNode.NavigateUrl = NodeURL;
ChildNode.Checked = ischecked;
ChildNode.Expanded = nodeExpand;
if(targetid!=null)
{
ChildNode.Target = targetid;
}
ChildNode.Type = NodeID.ToString();
parentNode.Nodes.Add(ChildNode);
return true;
}
catch(Exception ex)
{
//Response.Write(ex.Message.ToString());
return false;
}
}
http://www.microsoft.com/china/community/Column/30.mspx
{
TreeNode Node=new TreeNode() ;
if(pNode == null)
{ //添加根节点
Node.Text = Row["ConText"].ToString();
TreeView1.Nodes.Add(Node);
Node.Expanded=true;
AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归
}
else
{ //̀添加当前节点的子节点
Node.Text = Row["ConText"].ToString();
pNode.Nodes.Add(Node);
Node.Expanded = true;
AddTree(Int32.Parse(Row["ID"].ToString()),Node); //再次递归
}
}
/// 重载1:绑定树控件并显示——>节点有连接,连接传递一个参数,传递的参数是location
/// </summary>
/// <param name="f_key">数据库表关键字key值名</param>
/// <param name="f_parentkey">数据库表保存父节点id值字段名</param>
/// <param name="f_text">节点显示文字树数据库表字段名</param>
/// <param name="str_Sql">Select-SQL语句</param>
/// <param name="Frame">单击树节点时连接的目标框架</param>
/// <param name="Url">单击时连接网页名</param>
/// <param name="TreeView1">TreeView控件id值</param>
public void BindTreeView(string f_key,string f_parentkey,string f_text,string str_Sql,TreeView TreeView1)
{
GetTable(str_Sql); // 获得树的内存表
TreeView1.Nodes.Clear(); // 清空树
TreeNode rootnode=new TreeNode();
rootnode.CheckBox = true;
rootnode.Text=dt.Rows[0][f_text].ToString(); // 给节点绑定显示值
rootnode.NodeData=dt.Rows[0][f_key].ToString(); // 给节点绑定key值
rootnode.Expanded=true; // 默认根结点为展开
TreeView1.Nodes.Add(rootnode);
string parentid=dt.Rows[0][f_key].ToString(); // 他子节点的parentid字段值
CreateNode(f_key,f_parentkey,f_text,parentid,rootnode);// 加入所有根结点以下的结点
} /// <summary>
/// 重载1:绑定树控件并显示——>节点有连接,连接传递一个参数,传递的参数是location
/// </summary>
/// <param name="f_key">数据库表关键字key值名</param>
/// <param name="f_parentkey">数据库表保存父节点id值字段名</param>
/// <param name="f_text">节点显示文字树数据库表字段名</param>
/// <param name="str_Sql">Select-SQL语句</param>
/// <param name="Frame">单击树节点时连接的目标框架</param>
/// <param name="Url">单击时连接网页名</param>
/// <param name="TreeView1">TreeView控件id值</param>
public void CreateNode(string f_key,string f_parentkey,string f_text,string parentid,TreeNode parentnode)
{
DataRow [] drs = dt.Select(f_parentkey +"= '" + parentid + "'");// 选出所有子节点
//遍历所有子节点
foreach( DataRow r in drs )
{
TreeNode tempnode = new TreeNode();
tempnode.CheckBox = true;
tempnode.Text = r[f_text].ToString();
tempnode.NodeData = r[f_key].ToString();
parentnode.Nodes.Add(tempnode);
tempnode.Expanded=false;
parentid=r[f_key].ToString();
CreateNode(f_key,f_parentkey,f_text,parentid,tempnode);
}
}