本帖最后由 a46567305 于 2010-07-30 10:21:47 编辑

解决方案 »

  1.   

    试试这个,我最近也写了跟你需求类似的TreeView
            private DataSet ds;  
            public SqlConnection GetSqlConn()
            {
                try
                {
                    string strconn = "Server=(local);Database=SuperMarket;User id=sa;PWD=";
                    SqlConnection conn = new SqlConnection(strconn);
                    conn.Open();
                    return conn;
                }
                catch (Exception ex)
                {
                    return null;
                }
            }        public DataSet GetDataSet(string sqlComm, string tableName)
            {
                SqlConnection sqlconn = this.GetSqlConn();
                SqlDataAdapter sqlda = new SqlDataAdapter(sqlComm, sqlconn);
                DataSet ds = new DataSet();
                sqlda.Fill(ds, tableName);
                return ds;
            }        private void SubTree(TreeNode parentNode)
            {
                TreeNode childNode;
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    if (ds.Tables[0].Rows[i][2].ToString() == parentNode.Tag.ToString() && ds.Tables[0].Rows[i][0].ToString() != ds.Tables[0].Rows[i][2].ToString())
                    {
                            childNode = new TreeNode(ds.Tables[0].Rows[i][1].ToString());
                            childNode.Tag = ds.Tables[0].Rows[i][0].ToString();
                            parentNode.Nodes.Add(childNode);
                    }
                }
            }        private void frmOperation_Load(object sender, EventArgs e)
            {
                ds = this.GetDataSet("SELECT id,name,superid FROM SystemRights ORDER BY superid", "SystemRights");
                
                        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                        {
                            if (ds.Tables[0].Rows[i][0].ToString() ==  ds.Tables[0].Rows[i][2].ToString())
                            {
                                TreeNode node = new TreeNode(ds.Tables[0].Rows[i][1].ToString());
                                node.Tag = ds.Tables[0].Rows[i][0].ToString();
                                tvRights.Nodes.Add(node);
                                 SubTree(node);
                            }
                        }
           }
      

  2.   

    好的回去再研究下...
    有个问题
    ds.Tables[0].Rows[i][2].ToString() == parentNode.Tag.ToString() 
      左边得到是什么?表的第i行的第2列?
      

  3.   

    左边得到是superid  判断它的superid  是否和父节点的id一致,一致的话就放到父节点下作为子节点
      

  4.   

    为了方便的数据绑定
    我写了两个这样的树给实施人员使用,一个是绑定类似catId1, catIdName1, catId2, catName2, cat*,  bid, bname数据源的, 靠各个 catid 成树, 目的是显示 bid/bname----------------
    另一个是类似id,pid, name的数据源的, 根据 id/pid 成树.
    先把树表示和成树算法分离出来就好办了.
    有了树的数据表示, 生成 treenode 就小菜了.自己做吧, 就当你的数据结构和算法的练习.