我数据库里有一无限父子表
我想把它显示在TREEVIEW里
有没有事例

解决方案 »

  1.   

    网上搜不到吗?去搜搜看看吧,帮你顶顶,一个人也没有;
    http://www.cnblogs.com/dahuzizyd/archive/2004/08/09/31517.aspx
    http://www.cnblogs.com/bonny.wong/archive/2005/01/07/88169.html   
        
      可快速绑定到关系表或单表的树
      

  2.   

    //这是我绑定磁盘文件的方法,希望对你有帮助
    //最好不要一次性读取出来全部数据
    //开始读取第一级,当点第一级的时候再绑定下属子级
    //绑定treeView
    public void GetTreeNode()
    {
    this.treeView1.Nodes.Clear();
    SelectQuery selectQuery = new SelectQuery("select * from win32_logicaldisk");
      ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
    int i = 0;
      foreach (ManagementObject disk in searcher.Get())
    {
    if(disk["DriveType"].ToString() == "3")
    {
    TreeNode node = new TreeNode();
    node.Text = disk["Name"].ToString();
    node.Tag = disk["Name"].ToString()+"\\";
    node.ImageIndex = 0;
    this.treeView1.Nodes.Add(node); //this.InsertTree(treeView1.Nodes[i].Nodes, disk["Name"].ToString()); i ++;
    }
    }
    } /// <summary>
    /// 填充treeView节点
    /// </summary>
    /// <param name="nodes">要填充节点的父节点的子节点集合</param>
    /// <param name="dir">父节点所代表的路径</param>
    public void InsertTree(TreeNodeCollection nodes, string dir)
    {
    string[] cats = new string[0];
    try { cats = Directory.GetDirectories(dir); }
    catch { }
    if(cats.Length>0)
    {
    foreach(string cat in cats)
    {
    TreeNode node = new TreeNode();
    node.Text = cat.Substring(cat.LastIndexOf("\\")+1);
    node.Tag = cat+"\\";
    node.ImageIndex = 1;
    node.SelectedImageIndex = 2;
    nodes.Add(node);
    nodes[nodes.Count-1].EnsureVisible();
    //InsertTree(node.Nodes, cat);
    }
    }
    }
      

  3.   

    http://blog.sina.com.cn/s/blog_3e4c565b010003aa.html
      

  4.   

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                this.NodeBind();//页面加载时解析数据库绑定TreeNode根节点
                this.DisPanel(true);//显示或不显示
            }
        }    #region//数据库连接字符串
        public void conString()
        {
            string conStr = "server=.;uid=sa;pwd=;database=Demo";
            con = new SqlConnection(conStr);
        }
        #endregion    #region//页面加载时绑定TreeNode根节点
        public void NodeBind()
        {
            this.tvadd.Nodes[0].ChildNodes.Clear();//清空TreeView中所有节点
            this.tvadd.Nodes[0].Expanded = true;//设置根节点为展开形式
            this.AddChildNode("NULL",this.tvadd.Nodes[0]);
        }
        #endregion    #region//递归解析数据库中节点并绑定在TreeView控件上
        /// <summary>
        /// 递归解析数据库中节点并绑定在TreeView控件上
        /// </summary>
        /// <param name="sqltj">要解析库这个节点归属于哪个父节点</param>
        /// <param name="tn">要添加下一级节点的父节点</param>
        public void AddChildNode(string sqltj,TreeNode tn)
        {
            string sql = "select * from AddNodes where ParentID";//查询该父节点下还有无子节点SQL语句
            if (sqltj == "NULL")
            {
                sql += " IS NULL";//也就是说是根节点下面的第一级子节点
            }
            else
            {
                sql += "=" + sqltj;//查询sqltj下有无子节点
            }
            
            DataTable dt = this.dtDataBind(sql);
            if (dt.Rows.Count == 0)//说明此节点下无子节点
            {
                return;//退出
            }
            else
            {
                for (int i = 0; i < dt.Rows.Count; i++)//循环DataTable表中子节点记录
                {
                    TreeNode tnchild = new TreeNode();//创建新的子节点
                    tnchild.Text = dt.Rows[i][1].ToString();//为新建子节点的文本赋值
                    tnchild.Value = dt.Rows[i][1].ToString();//为新建子节点的Value赋值
                    tnchild.Expanded = true;//设置为不展开节点
                    tn.ChildNodes.Add(tnchild);//添加此节点的下一级子节点
                    //递归调用,一直往下直到添加完这一级下面的所有子节点为止,再转到下一个父节点,并添加所有此父节点下面的所有子节点
                    //i代表DataTable表中循环记录,0代表取得这个记录的ID值,为下面继续检查这个ID下是否还有子目录
                    //tnchild递归传递给下一次调用此方法,此时如果这个节点下还有子节点,它便成为父节点,对它下面的子节点进行添加
                    this.AddChildNode(dt.Rows[i][0].ToString(),tnchild);
                }
            }
        }
        #endregion    #region//绑定DataTable表
        public DataTable dtDataBind(string sql)
        {
            this.conString();
            da = new SqlDataAdapter(sql,con);
            dt = new DataTable();
            da.Fill(dt);
            return dt;
        }
        #endregion
      

  5.   

    public void AddNode(TreeNode tn, string parentId)
        {        //Hashtable htb = bll.GetInfoDirectoryList(parentId);
            DataTable dt = bll.GetInfoDirectoryList(parentId);
            foreach (DataRow dr in dt.Rows)
            {
                TreeNode NewNode = new TreeNode(dr["MenuName"].ToString(), dr["MenuID"].ToString());
                NewNode.ShowCheckBox = true;            NewNode.SelectAction = TreeNodeSelectAction.Expand;
                //NewNode.NavigateUrl = "nodepermission_role.aspx?nodekey=" + de.Key.ToString() + "&RoleId=" + Request.QueryString["RoleId"].ToString();
                NewNode.Target = "dd";
                tn.ChildNodes.Add(NewNode);
                if (dr["ParentID"].ToString() != "52")
                {
                    AddNode(NewNode, dr["MenuID"].ToString());
                }
                else
                {
                    NewNode.ShowCheckBox = false;
                }
            }
        }
      

  6.   

    这个是比较简单的tree绑定,性能不怎么样;不过使用比较方便