简单的递归算法,一时写不出来,求教老大们。 id Parentid name1 0 aaaa2 1 bbbb3 1 cccc4 2 dddd5 2 dddd6 4 dddd这是一个树结构,我点击根结点1,怎么得到下面所有的子结点?把点击的根结点下所有子结点放到一个数组里。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在做树型的是吧.. private void Page_Load(object sender, System.EventArgs e) { Conn=new SqlConnection(com.connstr); //new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connstr"]); if(!Page.IsPostBack) { CreateDataSet(); InitTree(tvMenu.Nodes,"0"); } } //建立数据集 private DataSet CreateDataSet() { cmdSelect="select * from T_Dpt"; myCmd=new SqlDataAdapter(cmdSelect,Conn); ds=new DataSet(); myCmd.Fill(ds,"tree"); return ds; } //建树的基本思路是:从根节点开始递归调用显示子树 private void InitTree(TreeNodeCollection Nds,string ParentDpt) { DataView dv=new DataView(); TreeNode tmpNd; string intId; dv.Table=ds.Tables["tree"]; dv.RowFilter="ParentDpt='" + ParentDpt +"'" ; foreach(DataRowView drv in dv) { tmpNd=new TreeNode(); tmpNd.ID=drv["DptNo"].ToString(); //tmpNd.Text=drv["DptName"].ToString(); tmpNd.Text="<div onclick='test(this.innerText)'>"+drv["DptName"].ToString()+"</div>";//添加单击事件 tmpNd.Expanded=true; tmpNd.ImageUrl="Images/"+"folder.gif";//drv["Icon"].ToString(); //tmpNd.NavigateUrl="../"+drv["Address"].ToString(); Nds.Add(tmpNd); intId=drv["ParentDpt"].ToString(); InitTree(tmpNd.Nodes,tmpNd.ID); } } //递归添加树的节点 public void AddTree(int ParentID, TreeNode pNode) { DataSet ds = (DataSet)this.ViewState["ds"]; DataView dvTree = new DataView(ds.Tables[0]); //过滤ParentID,得到当前的所有子节点 dvTree.RowFilter = "preid = " + ParentID; // dvTree.Sort = "orderid asc"; foreach (DataRowView Row in dvTree) { TreeNode Node = new TreeNode(); if (pNode == null) { //添加根节点 Node.Value = "1"; Node.Text = Row["name"].ToString(); TreeView1.Nodes.Add(Node); // Node.Expanded = true; AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归 } else { //添加当前节点的子节点 Node.Text = Row["name"].ToString(); pNode.ChildNodes.Add(Node); // Node.Expanded = true; AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归 } } } mengge(踏岸寻柳) 怎么遍历TreeNode啊? 求一个控制多条公告向上滚动的js代码! 向webBrowser写入cookie的问题 100分 C#安装包升级制作问题请教 有alert的重定向? 求一个VC与C#通过socket通信的例子 怎样在程序里对WORD网格线进行操作,在线等。。。 private 类名 类名 ; 什么含义?什么情况下必须?? [组合约束]值和引用约束 急! 在线等! 怎样在使C#在VS2003中生成.exe文件 在C#中如何做mdi子窗体? 请教vs2005的webconfig问题:建立一个website,里面没有webconfig,请问怎么建立或找到这个文件啊? 求教多线程问题
{ Conn=new SqlConnection(com.connstr);
//new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connstr"]);
if(!Page.IsPostBack)
{
CreateDataSet();
InitTree(tvMenu.Nodes,"0");
}
}
//建立数据集
private DataSet CreateDataSet()
{
cmdSelect="select * from T_Dpt";
myCmd=new SqlDataAdapter(cmdSelect,Conn);
ds=new DataSet();
myCmd.Fill(ds,"tree");
return ds;
}
//建树的基本思路是:从根节点开始递归调用显示子树
private void InitTree(TreeNodeCollection Nds,string ParentDpt)
{
DataView dv=new DataView();
TreeNode tmpNd;
string intId;
dv.Table=ds.Tables["tree"];
dv.RowFilter="ParentDpt='" + ParentDpt +"'" ;
foreach(DataRowView drv in dv)
{
tmpNd=new TreeNode();
tmpNd.ID=drv["DptNo"].ToString();
//tmpNd.Text=drv["DptName"].ToString();
tmpNd.Text="<div onclick='test(this.innerText)'>"+drv["DptName"].ToString()+"</div>";//添加单击事件
tmpNd.Expanded=true;
tmpNd.ImageUrl="Images/"+"folder.gif";//drv["Icon"].ToString();
//tmpNd.NavigateUrl="../"+drv["Address"].ToString();
Nds.Add(tmpNd);
intId=drv["ParentDpt"].ToString();
InitTree(tmpNd.Nodes,tmpNd.ID);
}
}
public void AddTree(int ParentID, TreeNode pNode)
{
DataSet ds = (DataSet)this.ViewState["ds"];
DataView dvTree = new DataView(ds.Tables[0]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "preid = " + ParentID;
// dvTree.Sort = "orderid asc"; foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{ //添加根节点 Node.Value = "1";
Node.Text = Row["name"].ToString();
TreeView1.Nodes.Add(Node);
// Node.Expanded = true;
AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归
} else
{ //添加当前节点的子节点 Node.Text = Row["name"].ToString();
pNode.ChildNodes.Add(Node);
// Node.Expanded = true;
AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归 }
} }