有winform控件treeview1绑定access数据库中的city表,表结构如下
地名   所属省市   
南京   江苏省       
无锡   江苏省      
苏州   江苏省    
杭州   浙江省
绍兴   浙江省
最后生成的树结构如下:
江苏省
  南京
  无锡
  苏州
浙江省
  杭州
  绍兴
请教该如何实现啊,谢谢啦!   

解决方案 »

  1.   

    大概就是这样一个简单版本的,因为是手写,可以部分地方有错误。中心思想就是用递归而已Protected Sub BindTreeView(byval Tv As TreeView)
    Dim dt as DataTable
    dt = GetDt("select * from tablename where parentid = 0order by sortid")
    for i as integer = 0 to dt.rows.count -1
    dim tn as new treenode
    '绑定tn的各个属性
    tv.nodes.add(tn)
    if dt.rows(i)("myhref").tostring.length = 0 then
    bindchildnode(tn,convert.toint32(dt.rows(i)("id")))
    end if
    next
    end subprotected sub bindchildnode(byval tn as treenode,byval pid as integer)
    dim dt as datatable
    dt = GetDt("select * from tablename where parentid = '"+pid.tostring+"' order by sortid")
    for i as integer = 0 to dt.rows.count -1
    dim treeN as new treenode
    '各种绑定
    tn.childnodes.add(treeN)
    if dt.rows(i)("myhref").tostring.length = 0 then
    bindchildnode(treen,convert.toint32(dt.rows(i)("id")))
    end if
    next
    end sub
      

  2.   

    定义 数据库 tst 
    城市 city
    省 parent
    select parent,citys=
    rtrim(stuff((select city+' ' from tst t where t.parent=tst.parent for xml path('')),1,0,''))
    from tst
    group by parent        private void InitEx()
            {
                db d = new db();
                SqlDataReader dr = d.GetAll();
                while (dr.Read())
                {
                    TreeNode tnp = new TreeNode(dr["parent"].ToString());
                    string[] sCitys = dr["citys"].ToString().Split(' ');
                    foreach (string sCity in sCitys)
                    {
                        TreeNode tnc = new TreeNode(sCity);
                        tnp.Nodes.Add(tnc);
                    }
                    treeView1.Nodes.Add(tnp);
                }
                dr.Close();
            }
    GetAll 就是执行此SQL语句的返回结果
      

  3.   

    上面的SQL语句针对SQLServer而言
    Access实在不行就查2次吧
      

  4.   

           //按钮的点击事件
            private void button2_Click(object sender, EventArgs e)
            {
                sqlstr="select 所属省市 from city group by 所属省市";
                DataTable dtroot = selectinfo(sqlstr);  //selectinfo方法是操作数据库的            foreach(DataRow dr in dtroot.Rows)
                {
                   TreeNode tn=new TreeNode();
                   tn.Text=dr["所属省市"].ToString().Trim();
                   bindinfo(dr["所属省市"].ToString().Trim(), tn);
                   treeView1.Nodes.Add(tn);
                }
            }       public void bindinfo(string pstr,TreeNode tn)
            {
                sqlstr = "select 地名 from city where 所属省市='" + pstr+ "'";
                DataTable dtchild = selectinfo(sqlstr);            foreach (DataRow drc in dtchild.Rows)
                {
                    TreeNode tnc = new TreeNode();
                    tnc.Text = drc["地名"].ToString().Trim();
                    tn.Nodes.Add(tnc);
                }
             }这样就是你要的效果。