看看吧private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["conn"]);
SqlDataAdapter da=new SqlDataAdapter("select * from TreeView",conn);
DataSet ds=new DataSet();
da.Fill(ds);
bindDDL(ddl,ds,0,"");
}
}
private void bindDDL(DropDownList DDL,DataSet ds,int ParentID,string Tab)
{
DataView dv=new DataView(ds.Tables[0]);
dv.RowFilter="ParentMenu="+ParentID.ToString();
int count=0;
foreach(DataRowView Row in dv) 
{
count++;
if(Tab.IndexOf("├")>-1)
{
Tab=Tab.Replace("├","│");
}
if(Tab.IndexOf("└")>-1)
{
Tab=Tab.Replace("└","");
}
if(dv.Count==count)
{
Tab =Tab+"└";
}
else 
{
Tab =Tab+"├";
}
DDL.Items.Add(new ListItem(Tab+Row["MenuName"].ToString(),Row["MenuID"].ToString()));
bindDDL(ddl,ds,int.Parse(Row["MenuID"].ToString()),Tab);
Tab= Tab.Remove(Tab.Length-1,1);
}}

解决方案 »

  1.   

    http://www.cnmaster.net/news/show.aspx?id=48&cid=25
      

  2.   

    这种都是用层来实现的,做web 开发的最好还是熟悉一下html和css 以及javascript, 这些是很重要的基础知识
      

  3.   

    你的这个写法生成后 如下代码,
                            <select name="ctl00$PageBody$kingDDLGroupID1$DropDownList1" id="ctl00_PageBody_kingDDLGroupID1_DropDownList1">
    <option value="1">├ 环保科</option>
    <option value="2">│ ├ 采油1矿</option>
    <option value="6">│ │ ├ 采油1矿1队</option>
    <option value="7">│ │ ├├ 采油1矿2队</option>
    <option value="9">│ │ ├├├ 采油1矿4队</option>
    <option value="8">│ │ ├├├└ 采油1矿3队</option>
    <option value="3">│ ├├ 采油2矿</option>
    <option value="10">│ ├│ ├ 采油2矿1队</option>
    <option value="11">│ ├│ ├├ 采油2矿2队</option>
    <option value="12">│ ├│ ├├├ 采油2矿3队</option>
    <option value="13">│ ├│ ├├├└ 采油2矿4队</option>
    <option value="4">│ ├├├ 采油3矿</option>
    <option value="5">│ ├├├└ 采油4矿</option>
    <option value="14">├├ 合同科</option>
    <option value="15">├├└ 财务科</option></select>每一层,只有第一个是对的,不知道如何修改!!呵呵请教!!
      

  4.   

    代码如下:
            private   void   bindDDL(DropDownList  DDL,int  ParentID,string  Tab) 
            {
                int TotalRecord = 0;
                int intCount = 0;
                QueryParam qp = new QueryParam();
                qp.Where = "Where G_Delete=0 and G_ParentID =" + ParentID ;
                qp.Orderfld = "G_ShowOrder";
                qp.OrderType = 0;
                ArrayList lst = BusinessFacade.sys_GroupList(qp, out TotalRecord);            foreach (sys_GroupTable Row in lst)
                {
                    intCount++;
                    if (Tab.IndexOf("├ ") > -1)
                    {
                        Tab = Tab.Replace("├ ", "│ ");
                    }
                    if (Tab.IndexOf("└ ") > -1)
                    {
                        Tab = Tab.Replace("└ ", " ");
                    }
                    if (lst.Count == intCount)
                    {
                        Tab = Tab + "└ ";
                    }
                    else
                    {
                        Tab = Tab + "├ ";
                    }
                    DDL.Items.Add(new ListItem(Tab + Row.G_CName, Row.GroupID.ToString()));
                    if (intCount >1)
                    {                    Tab = Tab.Remove(Tab.Length - 1, 1);
                        bindDDL(DDL, Row.GroupID, Tab);
                    }
                    else
                    {
                         bindDDL(DDL, Row.GroupID, Tab);
                       Tab = Tab.Remove(Tab.Length - 1, 1);
                    }
                }
            } 
      

  5.   

    找到原因了,是因为tab连接的字符串后边有空格,哎耽误我一晚上功夫!!新的代码如下!!       private   void   bindDDL(DropDownList  DDL,int  ParentID,string  Tab) 
            {
                int TotalRecord = 0;
                int intCount = 0;
                QueryParam qp = new QueryParam();
                qp.Where = "Where G_Delete=0 and G_ParentID =" + ParentID ;
                qp.Orderfld = "G_ShowOrder";
                qp.OrderType = 0;
                ArrayList lst = BusinessFacade.sys_GroupList(qp, out TotalRecord);            foreach (sys_GroupTable Row in lst)
                {
                    intCount++;
                    if (Tab.IndexOf("├") > -1)
                    {
                        Tab = Tab.Replace("├", "│");
                    }                if (Tab.IndexOf("└") > -1)
                    {
                        Tab = Tab.Replace("└", "");
                    }                if (lst.Count == intCount)
                    {
                        Tab = Tab + "└";
                    }
                    else
                    {
                        Tab = Tab + "├";
                    }                DDL.Items.Add(new ListItem(Tab + Row.G_CName, Row.GroupID.ToString()));
                    bindDDL(DDL, Row.GroupID, Tab);
                    Tab = Tab.Remove(Tab.Length - 1, 1);
                }
            } 
    产生效果如下:<select name="ctl00$PageBody$kingDDLGroupID1$DropDownList1" id="ctl00_PageBody_kingDDLGroupID1_DropDownList1">
    <option value="1">├环保科</option>
    <option value="2">│├采油1矿</option>
    <option value="6">││├采油1矿1队</option>
    <option value="7">││├采油1矿2队</option>
    <option value="9">││├采油1矿4队</option>
    <option value="8">││└采油1矿3队</option>
    <option value="3">│├采油2矿</option>
    <option value="10">││├采油2矿1队</option>
    <option value="11">││├采油2矿2队</option>
    <option value="12">││├采油2矿3队</option>
    <option value="13">││└采油2矿4队</option>
    <option value="4">│├采油3矿</option>
    <option value="5">│└采油4矿</option>
    <option value="14">├合同科</option>
    <option value="15">└财务科</option></select>
    基本实现了我的要求,
      

  6.   


       private void AddDataTree(int parentId, string increase, DataTable source)
        {
            increase = increase + "---";        DataRow[] rowCollection = source.Select("父节点 = " + parentId);
            foreach (DataRow row in rowCollection)
            {
                string itemName = increase + "|" + row["绑定Value"].ToString();
                this.下拉控件.Items.Add(new ListItem(itemName, row["绑定Key"].ToString()));            //递归加载
                if (source.Select("父节点 = " + Convert.ToInt32(row["当前节点"])).Length > 0)
                {
                    AddDataTree(Convert.ToInt32(row["当前节点"]), increase, source);
                }
            }
        }    public void Init_Control()
        {
            this.下拉控件.Items.Add(new ListItem("根节点", "0"));
            string strIncrease = "---";        using (DataTable _table = 查出下拉控件所要绑定的所有数据)
            {
                foreach (DataRow row in _table.Rows)
                {
                    this.下拉控件.Items.Add(new ListItem(strIncrease + "|" + row["绑定Value"].ToString(), row["绑定Key"].ToString()));
                    AddDataTree(Convert.ToInt32(row["channel_id"]), strIncrease, _tableChannel);
                }
            }
        }
    自己看咯
      

  7.   

    逻辑问题, 这和实现树没有什么区别。 。只是把节点改成字符串,放到DropDownList下面的item而已。
      

  8.   

    主调方法Init_Control()
    数据形式给出来了
    每个下拉项前面的符号只是个样子.
    怎么配就看你个人喜好了.
      

  9.   


    ///   <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--;   
    }   
      

  10.   

    http://www.51ascx.com/50.html
    扩展DropDownList支持分组功能