Fork me on GitHub
.net求学者

ASP.NET中树型DropDownList的绑定

首先设计好数据库,假设数据库有三个字段Id,ParentId,Name。ParentId是树性结构必须的,就是节点的父节点id,假设跟节点id都是0。下面就可以绑定了!

  思路应该很简单,就是先绑定根节点,再循环绑定子节点!父节点和子节点之间为了显示出层次结构,用空格格开,不过不是space键,没用的,必须用v1的特殊字符1。

  /// <summary>
        /// 绑定根节点
        /// </summary>
        void bindGroup()
        {
            DataTable dt = new DataTable();//获取所有节点
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow row in dt.Rows)
                {
                    if (row["ParentId"].ToString().Trim() == "0")//绑定根节点
                    {
                        this.drpItGroup.Items.Add(new ListItem(row["Name"].ToString(), row["Id"].ToString()));
                        this.bindDropChildItem(this.drpItGroup, dt, row["Id"].ToString(), 1);
                    }
                }
            }
        }
        /// <summary>
        /// 绑定子节点
        /// </summary>
        /// <param name="d"></param>
        /// <param name="dt"></param>
        /// <param name="id"></param>
        /// <param name="length"></param>
        void bindDropChildItem(DropDownList d, DataTable dt, string id, int length)
        {
            DataRow[] rows = dt.Select("ParentId='" + id + "'", "Id DESC");//取出id子节点进行绑定
            for (int i = 0; i < rows.Length; i++)
            {
                this.drpItGroup.Items.Add(new ListItem(this.SpaceLength(length) + rows[i]["Name"].ToString(), rows[i]["Id"].ToString()));
                this.bindDropChildItem(d, dt, rows[i]["Id"].ToString(), length + 1);//空白数目加1
            }
        }
        /// <summary>
        /// 子节点前面的空白数
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        string SpaceLength(int i)
        {
            string space = "";
            for (int j = 0; j < i; j++)
            {
                space += " ";//注意这里的空白是智能abc输入法状态下的v11字符;
            }
            return space;
        }

 

posted @ 2014-02-28 09:59  hy31337  阅读(831)  评论(0编辑  收藏  举报
.net求学者