数据库设计id  fid   name1    0     小学
2    0     初中
3    0     高中
4    1     一年级
5    2     初一
6    3     高一
我定义了两个类。类1:
        #region 返回DataSet数据集函数        public DataSet getds(string sqlstr, string str_table)
        {
            SqlConnection sqlcon = this.getcon();
            SqlDataAdapter sqlsda = new SqlDataAdapter(sqlstr, sqlcon);
            DataSet myds = new DataSet();
            sqlsda.Fill(myds, str_table);
            return myds;
        }
        #endregion类2:public TreeNode getNode(DataRow row, SqlConnection cn) //这个暂时写在 winfrom中
        {
            TreeNode nod = new TreeNode();
            nod.Text = row[1].ToString();
            string strsql = "............";//直接写成 select * from tb 还是要带什么条件呢。
            DataSet ds = DB_Operate.getds(strsql, "tb");
            if (ds.Tables[0].Rows.Count == 0)
            {
                return nod;
            }
            else
            {
                foreach (DataRow r in ds.Tables[0].Rows)
                {
                    nod.Nodes.Add(getNode(r, cn));                }
                return nod;
            }        }在winform中 调用类2中的方法然后绑定treeview数据。请问要怎么写呢。最好有代码。谢谢拉。
在论坛上看了很多别人的代码都是写在winform中的。我想写在类中。请问要怎么写呢。
上面的代码写的乱七八糟的。请高手指教。谢谢。当这个写好之后。我如果用鼠标点击其中一个结点。我要如何获得他的ID 以及父ID呢。
本人分不多。如分不够再加谢谢拉。

解决方案 »

  1.   

    同一个表可以用递归来绑TreeView
      

  2.   

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

  3.   

    可不可以不写在winfrom中呀。我想写在两个类中。具体要怎么写呢。
      

  4.   

                TreeNode root, node;
                DataSet ds = new DataSet();
                ds.ReadXml(Application.StartupPath + "\\TreeConfig.xml");
                foreach (DataTable dt in ds.Tables)
                {
                    string[] tmp = dt.TableName.Split('!');
                    root = new TreeNode(tmp[1]);//实例化根节点
                    root.Name = tmp[0];
                    treeDisplayCloumns.Nodes.Add(root);//往树添加根节点
                    foreach (DataRow dr in dt.Rows)//遍历绑定子节点
                    {
                        node = new TreeNode(dr["cnName"].ToString());
                        node.Name = dr["enName"].ToString();
                        node.Tag = tmp[0];
                        root.Nodes.Add(node);往当前根节点添加子节点
                    }
                }
      

  5.   

      //  节点变化时出发
    protected void tvlist_SelectedNodeChanged(object sender, EventArgs e)
        {
            int id = Convert.ToInt32(this.tvlist.SelectedValue);
            if (id != 0)
            {
                Response.Redirect("Index.aspx?Id="+id);
            }    }
        //填充的类容
        public void fill(TreeNode node)
        {
            IList<HealthItem> list =ItemTypeManager.GethealthItem();
            if (list.Count != 0)
            {
                foreach (HealthItem item in list)
                {
                    TreeNode tn = new TreeNode();
                    tn.Text = item.ItemTypeName;
                    tn.Value = item.ItemTypeId.ToString();
                    tn.SelectAction = TreeNodeSelectAction.Select;
                    tn.PopulateOnDemand = true;
                   node.ChildNodes.Add(tn); 
                    //添加子节点            }
            }
     
        }
        //动态填充
        protected void tvlist_TreeNodePopulate(object sender, TreeNodeEventArgs e)
        {
            int depath =Convert.ToInt32(e.Node.Depth);
            if (depath == 0)
            {
                fill(e.Node);
            }
        //这是用于web 中的
      

  6.   


    帅哥能不能解释一下代码呀。好像在类中不能 TreeNode root, node; 这样定义吧!