none
树形结构的dropdownlist RRS feed

  • 问题

  • 我参考网上的代码写了:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="树形结构dropdownlist1.WebForm1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="True" 
                AutoPostBack="True">
            </asp:DropDownList>
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        </div>
        </form>
    </body>
    </html>

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    
    using System.Data;
    
    namespace 树形结构dropdownlist1
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                DataTable dt = CreateTable();
                DataRow[] rows = dt.Select("ParentID='-1'");
    
                ListItem li = new ListItem(rows[0]["Name"].ToString());
                this.DropDownList1.Items.Add(li);
                addOtherDll(Convert.ToInt32(rows[0]["DirID"]), 
                    dt, 1, this.DropDownList1);
            }
    
            private void addOtherDll(int DirId, DataTable datatable, 
                int deep, DropDownList ddl)
            {
                DataRow[] rowlist = datatable.Select("ParentID='" + DirId + "'");
                foreach (DataRow row in rowlist)
                {
                    string strPading = "";
                    for (int j = 0; j < deep; j++)
                    {
                        strPading += " "; 
                    }
                    //添加节点
                    ListItem li = new ListItem(strPading + "|-" + row["Name"].ToString());
                    li.Value = row["Name"].ToString();
                    ddl.Items.Add(li);
                    //递归调用addOtherDll函数,在函数中把deep加1
                    addOtherDll(Convert.ToInt32(row["DirID"]), datatable, deep + 1, ddl);
                }
            }
    
    
            private DataTable CreateTable()
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Name");
                dt.Columns.Add("DirID");
                dt.Columns.Add("ParentID");
    
                dt.Rows.Add(new object[] { "我的电脑", 1, -1 });
    
                dt.Rows.Add(new object[] { "A盘", 2, 1 });
                dt.Rows.Add(new object[] { "B盘", 3, 1 });
                dt.Rows.Add(new object[] { "C盘", 4, 1 });
    
                dt.Rows.Add(new object[] { "视频1", 5, 2 });
                dt.Rows.Add(new object[] { "视频2", 6, 2 });
    
                dt.Rows.Add(new object[] { "图片1", 7, 3 });
                dt.Rows.Add(new object[] { "图片2", 8, 3 });
    
                dt.Rows.Add(new object[] { "音乐1", 9, 4 });
                dt.Rows.Add(new object[] { "音乐2", 10, 4 });
    
                return dt;
            }
    
            protected void Button1_Click(object sender, EventArgs e)
            {
                Response.Write(this.DropDownList1.SelectedValue.ToString());
            }
    
    
    
        }//end  class
    }

    现在出来的结果还有一个不满意的地方,就是:

    选择之后显示的  text是     |-图片1    

    前面多了个    |-

    我需要怎么去除????


    2013年8月14日 6:27

答案

全部回复

  • 我的朋友说用 空格代替 |-     这的确是一个办法!

    还有别的吗?

    2013年8月14日 6:41
  • 这个符号是你初始化下拉列表时自己在代码中添加进去,就像你说的直接用空格代替或者不用这个符号不就可以了嘛, 或者你在选择事件里替换下其中的|-符号为空格或者其他你想设置的符号。

    If my post is helpful,please help to vote as helpful, if my post solve your question, please help to make it as answer. My sample

    2013年8月14日 8:44
  • 就是要怎么写啊??给个例子,谢谢。

    如果我想把这个功能作为一个用户自定义控件,要这么写?

    2013年8月15日 1:20
  • this.DropDownList1.SelectedValue.ToString().Replace(" |-","");
    2013年8月15日 1:39