我用的是ASp三层框架能的!我不会能! 没有能过!我刚刚毕业不久!看谁能帮我能能不!我会感激你们滴!有3个表一个 Province省份表 City 城市表 还有一个Area 区表 我想能个树形菜单 怎么能啊!!
Province省份表PId Name ShenNo(排序号) Area(分级省份)
----------- -------------------------------------------------- ----------- -----------
1 安徽 23 2
2 北京 2 2
... 
  10 2
City 城市表
CId Name ShiNo PId
----------- -------------------------------------------------- ----------- -----------
1 合肥市 9 1
2 芜湖市 1 1
...
Area 区表
AId AName QuNo CId
----------- -------------------------------------------------- ----------- -----------
1 东城区 1 3
2 西城区 2 3
3 崇文区 3 3
4 宣武区 4 3
5 朝阳区 5 3
6 丰台区 6 3
...                                                                                                               Id  Title (合作的公司) Address (公司的网址) ProId  cid   AId 
1   上海画质家有限公司         www.ok123.com     1   3  4    
 ....... 
如果用上面这个当成创建Tree 怎么创建的  后台可以添加修改删除的 后台写好了!那个Tree怎么显示的!                                                  三级树形菜单 怎么能啊!别嫌我的很少!我就这么多了!以后有了补给你们!  +安徽省
  -合肥市
  -合肥东区
+上海  
  -上海市
  -普陀区
  -黄埔区
+北京  
  -北京市
  -长安区
如果打开安徽显示安徽全部的合作公司  如果点击合肥 就显示安徽合肥的合作公司 
就像这个样子的!有会的吗?
我用的是ASp三层框架能的!我不会能! 没有能过!我刚刚毕业不久!谢谢你们啦 

解决方案 »

  1.   

    其实就是父子结构
    简单点,一个类别一个表
    比如,province:id,name
    City:id,provinceId,name
      

  2.   

    省市区可用一个表实现,树形分层。
    不过后台代码要多一些,这个应该常用到,了解一下也好。create table City
    (
    CityId int primary key auto_increment,
    City varchar(30) not null,
    ParentId int not null,
    Layer varchar(9) not null,
    Re varchar(255) null
    );treeview可以用递归算法加载,网上都有代码,
    用三个表也是可以的,不过扩展性不好。
      

  3.   

    一个表用递归,三个表就套三层循环啦,先查出省,循环,根据省查出是,循环,根据市查出地区,循环。每层都生成treenode 添加到上一级的treenode,就完啦
      

  4.   


    ASp三层框架  Bll  DaL  Models  表示层
      

  5.   


    Tree显示在前台的啊!后台才用下拉列表的!
      

  6.   

    漂亮MM就是受欢迎(虽然普通话还要加强 能==弄?)CSDN论坛首页左边那块菜单是你想要的效果不,如果是,你可以参考下传说中的梅花雪树你用纯asp实现起来可以比较难,下面给你2个参考资料梅花雪中文网可爱又可恨的梅花雪 
      

  7.   


    asp.net写的!不是Asp !就是查询出来 循环绑定Tree都行!我不会绑定!
      

  8.   

    lz怎么还没解决啊,看你发了几遍了!
    先查出所有的省,保存在DataSet中。然后调用下边的方法
    /// <summary>
        /// 创建DataSet的方法
        /// </summary>
        /// <param name="nodes">TreeView的根节点</param>
        /// <param name="ds">Dataset数据集合</param>
        /// <param name="pid">节点的父</param>
        private void CreateTreeView(TreeNodeCollection nodes, DataSet ds, int pid)
        {
            //定义筛选条件
            string sql = string.Format("ParentID={0}", pid);        //从Dataset中筛选符合条件的行的集合,筛选之后的这些行就是你要显示的数据
            DataRow[] drr = ds.Tables[0].Select(sql);        //遍历获得行的集合
            foreach (DataRow dr in drr)
            {
                //创建TreeView节点
                TreeNode tnode = new TreeNode();
                //添加到根节点中
                nodes.Add(tnode);
                //设置显示的文本
                tnode.Text = dr["PurName"].ToString();
                tnode.Value = dr["PurID"].ToString();
                 //这是作为调用下面的方法的参数。
                DataSet ds=new DataSet ();
                   ds=查询出所有的市的数据;
                //递归调用方法,显示下一级
                CreateTreeView(tnode.ChildNodes, ds, Convert.ToInt32(dr["PurID"]));
                //从Dataset中删除已经添加的行,提高访问效率
                ds.Tables[0].Rows.Remove(dr);        }
        }
      

  9.   

    三个嵌套循环
    先把所有数据都读出来到一个datatable里面
    for(循环datatable)
    {
      if(是省名称)
     {
     response.write(输出省名称...)...
       for(循环datatable)
     {
     if(是市名称)
     {
     response.write(输出市名称...)...
       for(循环datatable)
     {
     if(是区名称)
     {
     response.write(输出区名称...)...
     }
     }
     }
     }
     }
    }
      

  10.   


    发的不符合嘛! 根据我那4个表 显示Tree的显示!我不会啊!
      

  11.   

    for(循环省的datatable)
    {
     response.write("<div>" + 省.name + "</div>");
     for(循环市datatable)
     {
      if(市.PId == 省.pid)
      {
       response.write("<div>--"+ 市.name + "</div>");
        for(循环区datatable)
        {
          if(区.cid == 市.cid)
            response.write("<div>----" + 区.name + "</div>");
        }
      }
     }
    }
      

  12.   

    这种东西用TreeView很不好啊,建议使用三级联动的下拉菜单,比如用户在第一个菜单选择"安徽"之后,第二个菜单接收第一个下来菜单选择的值,然后绑定上城市的信息,即"合肥","芜湖"等等,以此类推,第三个下拉菜单接受第二个菜单的值来绑定区域的信息.在这种思路下就很好办了嘛,逻辑也很清楚了,对吧?
      

  13.   


    下拉菜单我会!不般来说都是后台 哪有前台用下拉列表的!老板叫用Tree实现!www.art-home.com.cn\work.aspx 你进入看看点击一下看看!那是我以前做的 现在老板说把城市和区也给我现实出来!
      

  14.   

    首页你要读出表里的数据,层级关系用递归就可以了,上面有人说啊。
    然后把读出来的数据生成成这种格式:
    <ul id="example">
    <li><span>A 1</span>
    <ul>
    <li><span>A 1.1</span>
    <ul>
    <li><span>A 1.1.1</span></li>
    <li><span>A 1.1.2</span></li>
    </ul>
    </li>
    </ul>
    </li>
    </ul>
    最后用这个http://docs.jquery.com/Plugins/Treeview,让它树形显示在网页里,还可以收缩。顺带疑问照片是你的吗?很漂亮啊!有前途
      

  15.   

    给个例子:表结构:id(类似于你的id+排序号) name pid(父节点)public class Model1
            {
                private string _ID;
                private string _Name;
                private string _PID;
                public string ID
                {
                    get { return _ID; }
                    set { _ID = value; }
                }
                public string Name
                {
                    get { return _Name; }
                    set { _Name = value; }
                }
                public string PID
                {
                    get { return _PID; }
                    set { _PID = value; }
                }
            }//自己定义的类
           static  List<Model1> l = new List<Model1>();
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    
                    for (int i = 0; i < 5; i++)
                    {
                        Model1 m = new Model1();
                        m.ID = i.ToString();
                        m.Name = i.ToString();
                        m.PID = "-1";
                        l.Add(m);
                    }
                    for (int i = 0; i < 8; i++)
                    {
                        Model1 m = new Model1();
                        m.ID = (i + 5).ToString();
                        m.Name = i.ToString() + i.ToString();
                        if (i < 5)
                        {
                            m.PID = i.ToString();
                        }
                        else
                        {
                            m.PID = "5";
                        }
                        l.Add(m);
                    }//往list里加数据,你应该是sql查询
                    BuildItemTree(TreeView1);
                }
            }
            public const string ROOT_ID = "000";//定义根节点
            public void BuildItemTree( TreeView ItemTreeView)
            {
                TreeNode tn = new TreeNode();
                tn.Value = ROOT_ID;
                tn.Text = "所有项目";
                this.LoadItemTree(ROOT_ID, tn);
                ItemTreeView.Nodes.Clear();
                ItemTreeView.ExpandDepth = 1;
                ItemTreeView.Nodes.Add(tn);
            }
            public void LoadItemTree(string itemid, TreeNode node)
            {
                List<Model1> lst = new List<Model1>();
                if (itemid != "000")
                {
                     lst = l.FindAll(
                        delegate(Model1 m)
                        {
                            return m.PID == itemid;
                        });
                }
                else
                {
                     lst = l.FindAll(delegate(Model1 m) { return m.PID == "-1"; });
                }//找每个节点的父节点,你应该是用findCitybypid(string pid)这个方法
                lst.Sort(delegate(Model1 ioi1, Model1 ioi2)
                   {
                       return ioi1.ID.CompareTo(ioi2.ID);
                   });//按节点排序,你的是按排序号排序
                foreach (Model1 o in lst)
                {
                    TreeNode n = new TreeNode();
                    n.Text = o.Name;
                    n.Value = o.ID;
                    node.ChildNodes.Add(n);
                    LoadItemTree(o.ID, n);
                }
            }
      

  16.   

    汗,你用TreeView来做的话,父节点就有31个,我随便展开2,3个节点,就占满一整个屏幕了..树形菜单一般都是父节点相对较少的情况下才用
    前台怎么就没有用下拉菜单的
      

  17.   

    有3个表一个 Province省份表 City 城市表 还有一个Area 区表 我想能个树形菜单 怎么能啊!!
    Province省份表PId Name ShenNo(排序号) Area(分级省份)
    ----------- -------------------------------------------------- ----------- -----------
    1 安徽 23 2
    2 北京 2 2
    ...  
      10 2
    City 城市表
    CId Name ShiNo PId
    ----------- -------------------------------------------------- ----------- -----------
    1 合肥市 9 1
    2 芜湖市 1 1
    ...
    Area 区表
    AId AName QuNo CId
    ----------- -----------
    1 东城区 1 3
    2 西城区 2 3
    3 崇文区 3 3
    4 宣武区 4 3
    5 朝阳区 5 3
    6 丰台区 6 3
    4.合作伙伴表 Collabate
    Id Title (合作的公司) Address(公司的网址) ProId(省份Id) cid(城市Id)  AId(区的Id)  
    1  上海画质家有限公司    www.ok123.com          1             3                 4 
      

  18.   


    发错了!4个表
    有4个表一个 Province省份表 City 城市表 还有一个Area 区表 我想能个树形菜单 怎么能啊!!
    Province省份表PId Name ShenNo(排序号) Area(分级省份)
    ----------- -------------------------------------------------- ----------- -----------
    1 安徽 23 2
    2 北京 2 2
    ...  
      10 2
    City 城市表
    CId Name ShiNo PId
    ----------- -------------------------------------------------- ----------- -----------
    1 合肥市 9 1
    2 芜湖市 1 1
    ...
    Area 区表
    AId AName QuNo CId
    ----------- -------------------------------------------------- ----------- -----------
    1 东城区 1 3
    2 西城区 2 3
    3 崇文区 3 3
    4 宣武区 4 3
    5 朝阳区 5 3
    6 丰台区 6 3
      

  19.   

    应要用TreeView做的话,就先创建一个XML数据源吧,XML文件时TreeView控件的最好的数据源
      

  20.   

    有4个表一个 Province省份表 City 城市表 还有一个Area 区表
    怎么看都是3个表...
    你闲麻烦,就直接把这3还是4个表的数据弄一个list里,反正字段都一样,用我那方法把 public void LoadItemTree(string itemid, TreeNode node)
            {
                List<Model1> lst = new List<Model1>();
                if (itemid != "000")
                {
                     lst = l.FindAll(
                        delegate(Model1 m)
                        {
                            return m.PID == itemid;
                        });
                }
                else
                {
                     lst = l.FindAll(delegate(Model1 m) { return m.PID == "-1"; });//改成从省级表查询
                }
                lst.Sort(delegate(Model1 ioi1, Model1 ioi2)
                   {
                       return ioi1.ID.CompareTo(ioi2.ID);
                   });//按节点排序,你的是按排序号排序
                foreach (Model1 o in lst)
                {
                    TreeNode n = new TreeNode();
                    n.Text = o.Name;
                    n.Value = o.ID;
                    node.ChildNodes.Add(n);
                    LoadItemTree(o.ID, n);
                }
            }
      

  21.   

    if (itemid != "000")
                {
                     lst = l.FindAll(
                        delegate(Model1 m)
                        {
                            return m.PID == itemid;
                        });//改成从市级表查询
                }
      

  22.   


    Province省份表PId Name ShenNo(排序号) Area(分级省份)
    ----------- -------------------------------------------------- ----------- -----------
    1 安徽 23 2
    2 北京 2 2
    ...   
      10 2
    City 城市表
    CId Name ShiNo PId
    ----------- -------------------------------------------------- ----------- -----------
    1 合肥市 9 1
    2 芜湖市 1 1
    ...
    Area 区表
    AId AName QuNo CId
    ----------- -----------
    1 东城区 1 3
    2 西城区 2 3
    3 崇文区 3 3
    4 宣武区 4 3
    5 朝阳区 5 3
    6 丰台区 6 3
    4.合作伙伴表 Collabate
    Id Title (合作的公司) Address(公司的网址) ProId(省份Id) cid(城市Id) AId(区的Id)   
    1 上海画质家有限公司 www.ok123.com 1 3 4 
      

  23.   


    明显是TreeView和数据库查出来的数据怎么绑定的问题~~
      

  24.   

    我觉得google reader可能是计算滚动条与屏幕的比例的,绝不是简单的上滚下滚
      

  25.   


    一定要用TreeView么?个人感觉直接查出数据用html拼出来不就省事多了。
      

  26.   


    public void tree()
            {
                const string ROOT_ID = "000";
                TreeNode tn = new TreeNode();
                tn.Value = ROOT_ID;
                tn.Text = "所有项目";
                List<M1> l1 = new List<M1>();//取所有省级
                List<M2> l2 = new List<M2>();//取所有市级
                List<M3> l3 = new List<M3>();//区级
                foreach (M1 m1 in l1)
                {
                    TreeNode n1 = new TreeNode();
                    n1.Text = m1.ItemName;
                    n1.Value = m1.ItemID;
                    tn.ChildNodes.Add(n1);
                    foreach (M2 m2 in l2)
                    {
                        if (m2.pid == m1.id)
                        {
                            TreeNode n2 = new TreeNode();
                            n2.Text = m1.ItemName;
                            n2.Value = m1.ItemID;
                            n1.ChildNodes.Add(n2);
                            foreach (M3 m3 in l3)
                            {
                                if (m3.pid == m2.id)
                                {
                                    TreeNode n3 = new TreeNode();
                                    n3.Text = m1.ItemName;
                                    n3.Value = m1.ItemID;
                                    n2.ChildNodes.Add(n3);
                                }
                            }
                        }
                    }
                }
            }这么弄会很烦人不解释了
      

  27.   

    1.数据库使用4#的这种。带一个parentidcreate table City
    (
        CityId    int primary key auto_increment,
        City    varchar(30) not null,
        ParentId    int not null,
        Layer    varchar(9) not null,
        Re    varchar(255) null
    );
    2.给你一个绑定到DropDownList的代码。/// <summary>   
    /// 页面加载   
    /// </summary>   
    /// <param name="sender"></param>   
    /// <param name="e"></param>   
    protected void Page_Load(object sender, EventArgs e)   
    {   
        //加载页面时,动态读取国家列表到DropList   
        CreateTree();   
    }   
      
    ///   <summary>      
    ///   绑定生成一个有树结构的下拉菜单      
    ///   </summary>      
    ///   <param   name="dtNodeSets">菜单记录数据所在的表</param>      
    ///   <param   name="strParentColumn">表中用于标记父记录的字段</param>      
    ///   <param   name="strRootValue">第一层记录的父记录值(通常设计为0或者-1或者Null)用来表示没有父记录</param>      
    ///   <param   name="strIndexColumn">索引字段,也就是放在DropDownList的Value里面的字段</param>      
    ///   <param   name="strTextColumn">显示文本字段,也就是放在DropDownList的Text里面的字段</param>      
    ///   <param   name="drpBind">需要绑定的DropDownList</param>      
    ///   <param   name="i">用来控制缩入量的值,请输入-1</param>      
    private void MakeTree(DataTable dtNodeSets, string strParentColumn, string strRootValue, string strIndexColumn, string strTextColumn, DropDownList drpBind, int i)   
    {   
        //每向下一层,多一个缩入单位      
        i++;   
      
        DataView dvNodeSets = new DataView(dtNodeSets);   
        dvNodeSets.RowFilter = strParentColumn + "=" + strRootValue;   
      
        string strPading = "";     //缩入字符     
      
        //通过i来控制缩入字符的长度,我这里设定的是一个全角的空格      
        for (int j = 0; j < i; j++)   
            strPading += " ";//如果要增加缩入的长度,改成两个全角的空格就可以了     
      
        foreach (DataRowView drv in dvNodeSets)   
        {   
            TreeNode tnNode = new TreeNode();   
            ListItem li = new ListItem(strPading + "├" + drv[strTextColumn].ToString(), drv[strIndexColumn].ToString());   
            drpBind.Items.Add(li);   
            MakeTree(dtNodeSets, strParentColumn, drv[strIndexColumn].ToString(), strIndexColumn, strTextColumn, drpBind, i);   
        }   
      
        //递归结束,要回到上一层,所以缩入量减少一个单位      
        i--;   
    }   
      
    /// <summary>   
    /// SQL语句查询,再绑定到DropList里面   
    /// </summary>   
    private void CreateTree()   
    {   
        //查询ZoneList   
        string sql = "SELECT *FROM Zone";   
        DataTable dt= DataAccess.GetDataSet(sql);   
      
        MakeTree(dt, "parentid", "0", "zone_id", "zonename_en", zone_id, -1);   
    }  
    3.给你看下上面代码的效果
      

  28.   

    很简单呀,懒人的数据表
    ID,name,type,top_ID
    1,山东,省,0
    5,济南,市,1