前台:
<asp:DropDownList ID="DdlSort" runat="server" Width="160px"></asp:DropDownList>后台
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack){  BindDropdownList();  }
    }
    public DataTable ExecuteDataTable(string CommandTxt)
    {
        string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["Data"]);
        OleDbConnection Conn = new OleDbConnection(ConnectionString);
        DataTable dataTable = new DataTable();
        OleDbDataAdapter adapter = new OleDbDataAdapter(CommandTxt, Conn);
        {
            adapter.Fill(dataTable);
        }
        return dataTable;
    }
    protected void BindDropdownList()
    {
        DataTable dt = new DataTable();
        try
        {
            dt = ExecuteDataTable("Select * from ClassInfo");
            CreateLevelDropDown(this.DdlSort, dt);
        }
        catch (Exception) { }
    }
    private void CreateLevelDropDown(DropDownList ddlst, DataTable dt)
    {
        System.Collections.ArrayList allItems = new ArrayList();
        DataRow[] rows = dt.Select("ClassPID=" + 0);
        foreach (DataRow row in rows)
        {
            CreateLevelDropDownAssistant(dt, ref allItems, row, string.Empty);
        }
        ListItem[] items = new ListItem[allItems.Count];
        allItems.CopyTo(items);
        ddlst.Items.AddRange(items);
    }
    private void CreateLevelDropDownAssistant(DataTable dt, ref ArrayList items, DataRow parentRow, string curHeader)
    {
        ListItem newItem = new ListItem(curHeader + parentRow["ClassName"].ToString(), parentRow["ClassID"].ToString());
        items.Add(newItem);
        parentRow.Delete();
        DataRow[] rows = dt.Select("ClassPID='" + newItem.Value + "'");
        for (int i = 0; i < rows.Length - 1; i++)
        {
            CreateLevelDropDownAssistant(dt, ref items, rows[i], curHeader.Replace("┣", "┃").Replace("┗", "┣") + "┣");
        }
        if (rows.Length > 0)
        {
            CreateLevelDropDownAssistant(dt, ref items, rows[rows.Length - 1], curHeader.Replace("┣", "┃").Replace("┗", "┣") + "┗");
        }
    }数据库设计ClassID ClassPID ClassName为什么我始终绑定不了数据??????????

解决方案 »

  1.   

    you need call DataBind() as below.  private   void   CreateLevelDropDown(DropDownList   ddlst,   DataTable   dt) 
            { 
                    System.Collections.ArrayList   allItems   =   new   ArrayList(); 
                    DataRow[]   rows   =   dt.Select("ClassPID="   +   0); 
                    foreach   (DataRow   row   in   rows) 
                    { 
                            CreateLevelDropDownAssistant(dt,   ref   allItems,   row,   string.Empty); 
                    } 
                    ListItem[]   items   =   new   ListItem[allItems.Count]; 
                    allItems.CopyTo(items); 
                    ddlst.Items.AddRange(items); 
                    ddlst.DataBind();
            } 
      

  2.   

    protected   void   Page_Load(object   sender,   EventArgs   e) 
            { 
                    if   (!IsPostBack){     BindDropdownList();     } 
            } 
            public   DataTable   ExecuteDataTable(string   CommandTxt) 
            { 
                    string   ConnectionString   =   "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source="   +   HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["Data"]); 
                    OleDbConnection   Conn   =   new   OleDbConnection(ConnectionString); 
                    DataTable   dataTable   =   new   DataTable(); 
                    OleDbDataAdapter   adapter   =   new   OleDbDataAdapter(CommandTxt,   Conn); 
                    { 
                            adapter.Fill(dataTable); 
                    } 
                    return   dataTable; 
            } 
            protected   void   BindDropdownList() 
            { 
                    DataTable   dt   =   new   DataTable(); 
                    try 
                    { 
                            dt   =   ExecuteDataTable("Select   *   from   ClassInfo"); 
                            CreateLevelDropDown(this.DdlSort,   dt); 
                    } 
                    catch   (Exception)   {   } 
            } 
    问题出现在这里,,,下面的问题没有,始终找不到原因
      

  3.   

    你是指無法把撈出來的數據綁定到dropdownlist嗎?  
    在你的CreateLevelDropDown 試試
    private   void   CreateLevelDropDown(DropDownList   ddlst,   DataTable   dt) 

            ddlst.DataSource = dt;
            ddlst.DataValueField = dt.Columns["DATA0"].ToString();//要給ddlst的value集合
            ddlst.DataTextField = dt.Columns["DATA1"].ToString();//要給ddlst的text(顯示)集合
            ddlst.DataBind();

      

  4.   

    you don't have to pass this.DdlSort into CreateLevelDropDown(). If you really have to, you need use 'ref' keyword CreateLevelDropDown(ref DropDownList ddlst, DataTable   dt) protected   void   BindDropdownList() 
            { 
                    DataTable   dt   =   new   DataTable(); 
                    try 
                    { 
                            dt   =   ExecuteDataTable("Select   *   from   ClassInfo"); 
                            CreateLevelDropDown(dt); 
                    } 
                    catch   (Exception)   {   } 
            } 
            private   void   CreateLevelDropDown(DataTable   dt) 
            { 
                    System.Collections.ArrayList   allItems   =   new   ArrayList(); 
                    DataRow[]   rows   =   dt.Select("ClassPID="   +   0); 
                    foreach   (DataRow   row   in   rows) 
                    { 
                            CreateLevelDropDownAssistant(dt,   ref   allItems,   row,   string.Empty); 
                    } 
                    ListItem[]   items   =   new   ListItem[allItems.Count]; 
                    allItems.CopyTo(items); 
                    this.DdlSort.Items.AddRange(items); 
                    this.DdlSort..DataBind(); 
            }