我要实现一个树形菜单,从数据库里导出的数据,现在数据库结构设计成这样了
id(子类菜单编号)    parentid(父类菜单编号)     listname(菜单显示的内容)
1                  0                         中国           //这里是根节点,
2                  1                         北京           //1作为第二级菜单的根节点,他的子结点号是2
3                  1                         河北           //同样1为第二级菜单,子结点号为3
4                  2                         朝阳区         //2作为第三极菜单的根节点,4作为三级的子结点
5                  3                         河北省廊坊市   //3作为第三极菜单的根节点,5作为三级的子结点  
.....依次这样安排数据库结构
然后从根节点中国开始,查询出根节点的parentid和它的子结点id,然后在根据id进行查询,当它是parentid的时候在查它的子菜单,依次使用递归运算,结果能够把所有的子类都显示出来,可是同级别的菜单就不能显示出来了,比如说北京和河北是同级的,就只能把北京的子类显示出来,河北就不能显示了,所以想请教一下,谁能知道怎么做,最好是有同样数据库结构的代码,先谢过了。   

解决方案 »

  1.   

        private void CreateTree(TreeNodeCollection node, string parent_id)
        {
            DataView dvList = new DataView(this.objDataTable);
            dvList.RowFilter = "parentid='" + parent_id + "'";  //过滤父节点 
            TreeNode nodeTemp;
            foreach (DataRowView dv in dvList)
            {
                
                nodeTemp = new TreeNode();
                nodeTemp.Value = dv["iD"].ToString();  //节点ID 
                nodeTemp.Text = dv["listname"].ToString();  //节点名称             node.Add(nodeTemp);  //加入节点 
                nodeTemp.Expanded = false;
                CreateTree(nodeTemp.ChildNodes, nodeTemp.Value.ToString());  //递归 
            }
        }
    调用     
      private DataTable objDataTable; 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataSet ds = GlobalFunc.GetDataSet("SELECT * from table0");
                DataTable dt =ds.Tables[0];
                objDataTable = ds.Tables[0];            CreateTree(TreeView1.Nodes, "0"); 
                
               
            }
     }
      

  2.   

    我做的是webForm,不想使用treeview,要是使用那个的话还得添加控件,能不能费点事,有直接的代码呢?