DropDownList 递归绑定

    技术2022-05-19  26

    要实现下面的效果:

    首先可实现DropDownList:

         public void SetDDL(ref  System.Web.UI.WebControls.DropDownList ddl, string value)        {            if (ddl != null)            {                if (ddl.Items.FindByValue(value) != null)                {                    ddl.SelectedIndex = -1;                    ddl.Items.FindByValue(value).Selected = true;                }

                }        }

     

    具体实现的方法:

            public void BindAccountTree(ref  System.Web.UI.WebControls.DropDownList ddl, bool withEmptyItem)        {            int AccountID= -1;

                ddl.Items.Clear();            Account rootAccount = AccountLogic.GetInstance().GetAccount(AccountID);            ddl.Items.Add(new ListItem(rootAccount.Name, rootAccount.AccountID.ToString()));

                AddChild(rootAccount.AccountID, ddl, 0);

                if (withEmptyItem)            {                ListItem item = new ListItem("请选择...", "");                ddl.Items.Insert(0, item);            }        }

     

    GetAccount 方法:

     public Account GetAccount(int AccountID) //Get one Account        {

                string sqlCommand = "SELECT * FROM Account WHERE AccountID=" + AccountID;

            }

    AddChild方法:

     private void AddChild(int ParentID, DropDownList ddl, int Level)        {            string strSpace = "                    ";            IList list = AccountLogic.GetInstance().FetchSubAccounts(ParentID, "Name");            string strA = strSpace.Substring(0, Level + 1) + "|-";

                Account account = null;

                for (int i = 0; i < list.Count; i++)            {                account = (Account)list[i];

                    ddl.Items.Add(new ListItem(strA + account.Name, account.AccountID.ToString()));

                    if (Level > 20)                    break;                AddChild(account.AccountID, ddl, Level + 1);            }        }

    FetchSubAccounts方法:

           public IList FetchSubAccounts(int AccountID, string Order)        {            IList Accounts = new ArrayList();            Database db = DatabaseFactory.CreateDatabase();            string sqlCommand = "SELECT * FROM Account ";

                sqlCommand += (sqlCommand.IndexOf("WHERE") > 0 ? " AND" : " WHERE") + " (Deleted = 0)";

                sqlCommand += " AND (ParentID=" + AccountID + ")";

                if (Order.Trim().Length > 0)            {                sqlCommand += " ORDER BY " + Order;//Title DESC, Href            }            DbCommand dbCommand = db.GetSqlStringCommand(sqlCommand);            try            {                using (IDataReader dr = db.ExecuteReader(dbCommand))                {                    while (dr.Read())                    {                        Accounts.Add(GetAccount(dr));                    }                }            }            catch (Exception ex)            {                Logging.WriteLog(ex);            }            return Accounts;        }

    页面调用方法:

     private void BindParentAccount()        {            this.BindAccountTree(ref this.ddlAccount, true);        }

    数据库表结构:


    最新回复(0)