现在要做一个dropdownlist级联.. 效果如下: 
|-(这只是一个样式,无所谓的)作为一级分类 
    |-中国 
    |-北京市 
      |-海淀区 
    |-韩国 
当我选择一级分类时,在文本框里输入美国后,执行添加,就会加到最顶级里去 
效果如下: 
|-中国 
  |-北京市 
  |-海淀区 
|-韩国 
|-美国 
当我选择中国时,在文本框里输入湖南省后,执行添加,就会加到中国里去 
效果如下: 
|-中国 
  |-北京市 
    |-海淀区 
  |-湖南省 
当我选择北京市进行添加的时候,在文本框里输入XX区后,执行添加,效果如下
|-中国 
  |-北京市 
    |-海淀区 
    |-XX区 
  |-湖南省 
数据库表结构如下: 
[id] [int] IDENTITY(1,1) NOT NULL,--编号,自动增长 
[lan] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,--多国化语言(这里可以不用到) 
[name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,--地区名称 
[parentid] [int] NOT NULL,--父级编号 
[num] [nvarchar](50),--编号 
请问哪位大虾可以帮小弟实现一下?我们主管说是用到递归,但是小弟不会.. 请各位大虾帮帮忙.. 还有,我不需要用到JS.我用的是vs2003 .net1.1版本的.

解决方案 »

  1.   

    没看到 dropdownlist 联级......
      

  2.   


    不是什么级联 只是一个和TREE树状结构而已
      

  3.   

    用TreeView我可以很简单地实现你上面的效果图
    对于你在一个DropDownList里完成的话,那不是DropDownList的级联.
      

  4.   

    Silverlight3
      有很好的效果!!!!!
      

  5.   

    public void GetInfoList(int parentId,int index)
    {
         //根据parentId读数据库集合
         InfoList infoList = DBFunction.GetInfByParentId(List);
         //设置显示效果
         string html = "|-";
         for(int i = 0; i < index; i ++)
         {
            html = " " + html;
         }
         //递归
         foreach(Info info in infoList)
         {
             dropdownList.items.add(info.id,html + info.name);
             GetInfoList(info.id,index++);
         }
    }page_load()
    {
      dropdownList.items.clear();
      GetInfoList(0,0);
    }大概是这样子。可以根据自己的要求调整下。
      

  6.   

    不用递归,直接放数据库,采用ajax的方式当选择第一个的时候,查询第二个的内容显示。
      

  7.   

     <!--运销管理-->
          <item text="运销管理" id="YXMG" im0="folderClosed.gif">
            <userdata name="url">
              ../Module
            </userdata>
            <userdata name="thisurl">
              ../Module/WG.aspx
            </userdata>
            
            <!--运销报表-->
            <item text="运销报表" id="3" im0="leaf_new.gif">
              <userdata name="url">
                ../Module
              </userdata>
              <userdata name="thisurl">
                ../Module/YunXiao.aspx
              </userdata>
            </item>        <!--襄樊处魏岗站原油运销统计月报表-->
            <item text="襄樊处魏岗站原油运销统计月报表" id="3" im0="leaf_new.gif">
              <userdata name="url">
                ../Module
              </userdata>
              <userdata name="thisurl">
                ../Module/YunXiao.aspx
              </userdata>
            </item>        <!--襄樊处荆门站原油运销统计月报表-->
            <item text="襄樊处荆门站原油运销统计月报表" id="3" im0="leaf_new.gif">
              <userdata name="url">
                ../Module
              </userdata>
              <userdata name="thisurl">
                ../Module/YunXiao.aspx
              </userdata>
            </item>        <!--襄樊处原油运销统计月报表-->
            <item text="襄樊处原油运销统计月报表" id="3" im0="leaf_new.gif">
              <userdata name="url">
                ../Module
              </userdata>
              <userdata name="thisurl">
                ../Module/YunXiao.aspx
              </userdata>
            </item>
          </item>
      

  8.   

    <script type="text/javascript">
    String.prototype._dhx_trim = function(){
                         return this.replace(/&nbsp;/g," ").replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g,"");
                      }
    /* get node as incoming parameter */
    var node=null;
    var t=document.location.href.split("?");
    var type=null;
    var base=t[0].replace("/ReportIndex.s?html","");
    if(t[1]!=null){
    var u=t[1].split("&"); 
    for(var q=0;q<u.length;q++){
    if((node==null)&&(u[q].split("=")[0]=="node")){
    node=(u[q].split("=")[1]!=null?u[q].split("=")[1]:null);
    if(node!=null){
    if(node.length==0){
    node=null;
    }
    };
    }
    if((type==null)&&(u[q].split("=")[0]=="type")){
    type=(u[q].split("=")[1]!=null?u[q].split("=")[1]:null);
    }
    };
    };

    function correctSizes(){
    document.getElementById('tabbarconteiner').style.height = (document.body.offsetHeight - 210)+'px'

    }
    /* init tree */
    var tree;
    var tree_smpl
    function loadTree(){
    tree=new dhtmlXTreeObject("doctree_box","100%","100%",0);
    tree.setImagePath("imgs/");
    tree.setOnClickHandler(function(id){openPathDocs(id);});
    tree.attachEvent("onOpenEnd",updateTreeSize);
    tree.enableCheckBoxes(false);
    tree.loadXML("XML/docs_tree.xml?nu=1",autoselectNode);
    }

    /* open path funtion */


    function openPathDocs(id)
    {
         if (id == "WGG" || id == "kb_faq01" || id == "hj" || id == "JM")
        {
            return;
        }
        
       var struserId = Report_ReportIndex.GetUserID().value;
       if (struserId == "null" || struserId == "")
       {
            window.open('../login.aspx','_parent');
                   return;
       }
       
        var ds = Report_ReportIndex.GetAuthority(id).value;
        if (ds.Tables[0].Rows[0].A  == 0)
        {
            alert("你没有操作该报表的权限");
            document.getElementById("sampleframe").setAttribute("src","../Module/RptIndex.aspx");
            return;
        }
        
    if(tree.getUserData(id,"thisurl")!=null){
    window.frames.sampleframe.location.href = tree.getUserData(id,"thisurl");
    return;
    }
    var entUrl = "";
    var getFileFl = true;
    var suffix = "#"+id

    do{
    var url = tree.getUserData(id,"url");
    if(url!=null){
    if(getFileFl){
    entUrl = url.toString()._dhx_trim()+suffix;
    getFileFl = false;
    }else{
    var arTmp = url.split("/");
    if(arTmp[arTmp.length-1].indexOf(".")!=-1){
    arTmp[arTmp.length-1] = "";
    url = arTmp.join("/");
    }
    if(url!="")
    entUrl = url.toString()._dhx_trim()+"/"+entUrl;
    }
    }
    id = tree.getParentId(id);
    }while(id!="0")

    window.frames.sampleframe.location.href = entUrl
    }

    function updateTreeSize(){
    this.allTree.style.overflow = "visible";
    this.allTree.style.height = this.allTree.scrollHeight+"px";

    }

    function autoselectNode(){
    if(type=="smpl"){
    tree_smpl.selectItem(node,true);tree_smpl.openItem(node)
    }else{
    tree.selectItem(node,true);tree.openItem(node)
    }
    }  </script>