表有ID Name PID 三个字段
如何在combobox中写递归显示如下效果文科
  语文
    作文
    阅读
  英语
    口语
    书面语
理科
  物理
  化学
综合科前面加空格代表子节点
请大虾帮忙啊~

解决方案 »

  1.   

    这个控件就是在前面加入空格好了,记住当前在什么深度中。treeView更合适
      

  2.   

    下面是java 写的,参考一下
    VectorTree = BuildTree(VectorTree,v,"0",1) ;
    //BuildTree
     private Vector BuildTree(Vector VectorTree,Vector v,String ParentID,int nDepth){     int nCount=0;
         for(int i=0;i<v.size();i++)
         {
               HashMap hm=(HashMap)v.get(i);
               if(hm.get("PARENTGROUPID").equals(ParentID))
               {
                  nCount++;
               }
         }
        int nTempCount=0;
        for(int i=0;i<v.size();i++)
        {
              HashMap hm=(HashMap)v.get(i);
              if(hm.get("PARENTGROUPID").equals(ParentID))
              {
                 nTempCount++;
                 HashMap temphm= new HashMap();
                 temphm.put("ID",(String)hm.get("ID"));
                 String StrList ="";
                 for(int j=0;j<nDepth-1;j++)
                   StrList +="┃";
                 if(nTempCount!=nCount)
                   StrList+="┣";
                 else
                   StrList+="┗";             temphm.put("GROUPNAME",StrList+(String)hm.get("GROUPNAME"));
                 VectorTree.add(temphm);
                 VectorTree = BuildTree(VectorTree, v,(String)hm.get("ID"),nDepth+1);
              }
        }     return VectorTree;
     }
      

  3.   

    public void getClassName(string id, string strfill)
            {
                getConnString();
                CmsDbApp cdb = new CmsDbApp(ConnString);
                bool myCheck = CmsDbBasic.SetConnection(connString);
                if (myCheck == false)
                {
                    MessageBox.Show("数据库连接错误,请重新配置数据库连接");
                }
                else
                {
                    CmsDbBasic cmsDb = new CmsDbBasic(connString);
                    DataTable dt = cdb.getDataTable(id, Convert.ToInt32(comboBox1.SelectedValue.ToString()));
                    foreach (DataRow dr in dt.Rows)
                    {                    //ListItem li = new ListItem(strfill+ dr["name"].ToString(),dr["map_id"].ToString());
                        //comboBox4.Items.Add(new ListItem(strfill+ dr["name"].ToString(),dr["map_id"].ToString()));
                        comboBox4.Items.Add(strfill + dr["name"].ToString());
                        DataTable dt2 = cdb.getDataTable(dr["map_id"].ToString(), Convert.ToInt32(comboBox1.SelectedValue.ToString()));
                        if (dt2.Rows.Count != 0)
                        {                        getClassName(dr["map_id"].ToString(), strfill + "...");
                        }
                    }
                }
            }
    我就是这样实现的
      

  4.   

    你主要看foreach那一部分就行.
      

  5.   

    liuchao305() 
     getConnString();
     CmsDbApp cdb = new CmsDbApp(ConnString);是什么来?
      

  6.   

    CmsDbBasic cmsDb = new CmsDbBasic(connString); 呢?
      

  7.   

    combobox中加一个树比较好,这个以前我们实现了
      

  8.   

    getConnString();
     CmsDbApp cdb = new CmsDbApp(ConnString);
    CmsDbBasic cmsDb = new CmsDbBasic(connString); 呢?
    哈哈这些都是我自己写的类第一个获得连接字符换。第二个数据库操作类。第三个数据库基类。这些都是些数据库的操作,这些你不用去管它。你主要看怎么给combobox添加树的方法.主要是在foreach里面实现了递归.
      

  9.   

    我根据大家的意见改了一个:        public void CreateComboboxTree(ComboBox trvDBBinding, DataView dv)
            {
                DataRowView[] arrDRV = dv.FindRows(0);//Get root data info
                int tnNew;
                if (arrDRV.Length == 0) return;
                foreach (DataRowView dr in arrDRV)
                {
                    trvDBBinding.Items.Add(dr["Name"].ToString());
                    tnNew=Convert.ToInt32(dr["ID"]);
                    CreateComboboxTreeNode(trvDBBinding, ref tnNew, dv);
                }
            }
            public void CreateComboboxTreeNode(ComboBox trvDBBinding,ref int tnParent, DataView dv)
            {
                DataRowView[] arrDRV = dv.FindRows(tnParent);//Get children data info
                int tnNew;
                foreach (DataRowView dr in arrDRV)
                {
                    trvDBBinding.Items.Add("---" + dr["Name"].ToString());
                    tnNew = Convert.ToInt32(dr["ID"]);
                    CreateComboboxTreeNode(trvDBBinding, ref tnNew, dv);
                }
            }但还不完善不能显示这种效果:
    文科
    ┃┣语文
    ┃┗英语
    理科
      ┣物理
      ┗数学 
    请问这种如何判断啊?