日期:2014-05-18  浏览次数:20371 次

求递归生成树的代码?
pid name parentid
 1 a  
 2 b 1
 3 c 2
 4 e 2
 5 f  
 6 g 5
 7 h 5
 8 w 6

要这样效果的树。。。。。。。。


------解决方案--------------------
//*****Build TreeView Node Code Next:

public void XT_GNML_Build_TreeNode(ref TreeView treview)
{
//****get database
DataSet DSet=(new ServerPropx.Servers()).XT_GNML_Base_Filter(""):

//***clear treeview Node
treview.Nodes.Clear();

//****create treenode object
TreeNode TRPNode=null;

//****load node
foreach(DataRow dRow in DSet.Table[0].Rows)
{
//****load Parnet dataset is zerno
if(dRow["F_Parent"].ToString()=="0")
{
TRPNode=new TreeNode():
TRPNode.Text=dRow["F_MC"].ToString();
TRPNode.ID=dRow["F_ID"].ToString():
}

//***Add TteeNode 
treview.Nodes.Add(TRPNode);

//*****filter chile Node
DataRow[] dCRow=DSet.Table[0].Select("F_PARENT='" + dRow["F_GNBH"].ToString() + "'");

XT_GNML_LoadChileTreeNode(ref dCRow,TRPNode,DSet);

}
}


private void XT_GNML_LoadChileTreeNode(ref DataRow[] dCRow,TreeNode TRCPNode,ref DataSet DSet)
{

foreach(DataRow dRow in dCRow)
{
TreeNode TREPNode=new TreeNode();
TREPNode.Text=dRow["F_MC"].ToString();
TREPNode.ID=dRow["F_ID"].ToString():

//**** Add Chile Node 
TRCPNode.Nodes.Add(TREPNode);

//*****filter chile Node
DataRow[] dPCRow=DSet.Table[0].Select("F_PARENT='" + dRow["F_GNBH"].ToString() + "'");

//***foreach load TreeNode
XT_GNML_LoadChileTreeNode(ref dPCRow,TREPNode,DSet);
}
}
------解决方案--------------------
C# code

// 生成树
void DeptDataFill()
{
  DataTable dt = new SqlQuery().DtQuery("select [pid],[name],[parentid] from [table1] order by [pid]");
  if (dt == null) return;
  foreach (DataRow dr in dt.Rows)
  {
    TreeNode node = new TreeNode(dr["name"].ToString(), dr["pid"].ToString());
    node.SelectAction = TreeNodeSelectAction.Select;
    if (dr["parentid"] is DBNull || dr["parentid"].ToString() == "")
    {
      trvDept.Nodes.Add(node);
    }
    else
    {
      TreeNode node1 = FindNode(trvDept.Nodes, dr["parentid"].ToString());
      if (node1 != null) node1.ChildNodes.Add(node);
    }
  }
}

// 查找节点
TreeNode FindNode(TreeNodeCollection nodes, string value)
{
  foreach (TreeNode node in nodes)
  {
    if (node.Value == value) return node;
    TreeNode node1 = FindNode(node.ChildNodes, value);
    if (node1 != null) return node1;
  }
  return null;
}