/建树的基本思路是:从根节点开始递归调用显示子树 
private void InitTree(TreeNodeCollection Nds,int parentId)
{
DataView dv=new DataView();
TreeNode tmpNd ;
int intId;
dv.Table=ds.Tables["tree"];
dv.RowFilter=" parentnode=" + parentId + " and nodenum > 0";
foreach(DataRowView drv in dv)
{
tmpNd = new TreeNode();
tmpNd.Tag=int.Parse(drv["nodenum"].ToString().Trim()); 
tmpNd.Text=drv["nodelabel"].ToString().Trim();
if(int.Parse(drv["nodetype"].ToString().Trim()) == 1)
{
tmpNd.ImageIndex = 0 ;
tmpNd.SelectedImageIndex = 1 ;
}
else
{
tmpNd.ImageIndex = 2 ;
tmpNd.SelectedImageIndex = 3 ;
}
Nds.Add(tmpNd);
intId=int.Parse(drv["parentnode"].ToString().Trim());
InitTree(tmpNd.Nodes,int.Parse(drv["nodenum"].ToString().Trim()));
}