DropDownList下拉框绑定树行结构

来源:互联网 发布:unity3d 打包ios 详细 编辑:程序博客网 时间:2024/06/01 18:55

  

 

       DDLDepart.Items.Insert(0, new ListItem("请选择部门名称", "-1"));        

       BindDepartment()
        /// <summary>
        /// 绑定部门树
        /// </summary>
        private void BindDepartment()
        {
            SqlDepartment SqlDepart = new SqlDepartment();
            var TypeList = SqlDepart.GetDepartment();  //此处用的是linq返回的是整个部门表
            if (!IsPostBack)
            {
                DataTable datatable = TypeList.ToDataTable(); 将linq得到的表转换成datatable
                DataRow[] row = datatable.Select("Parentcode=0"); //选取根节点
                //添加根目录
                for (int i = 0; i <= row.Length - 1; i++)
                {
                    ListItem li = new ListItem();
                    li.Text = row[i]["Departname"].ToString();
                    li.Value = row[i]["Departid"].ToString();
                    DDLDepart.Items.Add(li);
                    AddOtherDll("", Convert.ToInt32(row[i]["PKID"]), datatable, 1); //添加根节点
                }
            }
        }
        /// <summary>
        /// 添加其他节点
        /// </summary>
        /// <param name="Pading">空格</param>
        /// <param name="DirId">父路径ID</param>
        /// <param name="datatable">返回的datatable</param>
        /// <param name="deep">树形的深度</param>
        private void AddOtherDll(string Pading, int DirId, DataTable datatable, int deep)
        {
            DataRow[] rowlist = datatable.Select("Parentcode='" + DirId + "'");
            foreach (DataRow row in rowlist)
            {
                SqlAssetType sql = new SqlAssetType();
                string strPading = "";
                for (int j = 0; j < deep; j++)
                {
                    strPading += " "; //用全角的空格
                }
                //添加节点
                ListItem li = new ListItem();
                li.Text = strPading + " " + row["Departname"].ToString();
                li.Value = row["Departid"].ToString();
                DDLDepart.Items.Add(li);
                //递归调用addOtherDll函数,在函数中把deep加1
                AddOtherDll(strPading, Convert.ToInt32(row["PKID"]), datatable, deep + 1);//递归添加子节点
            }
        }