做个记录,省得以后用到的时候都得再找以前写的代码,而且发现以前写的代码还有点错误的,但层级达到3层以上的时候就看得出错误在哪了,下面是更正后的代码:
// 绑定行政区域下拉列表 private void BindAreaDDL() { ddl行政区域.Items.Clear(); ddl行政区域.Items.Insert(0, new ListItem("", "0")); DataSet ds = new S_Area2DAO().GetList(""); if (ds.Tables.Count > 0) { var query1 = ds.Tables[0].AsEnumerable().Where(x => x["parentid"].ToString() == "0"); foreach (var item in query1) { ListItem li = new ListItem(item["name"].ToString(), item["id"].ToString()); ddl行政区域.Items.Add(li); int index = 1; AddChildListItem(ds, item["id"].ToString(), index); } } } // 递归添加子项 private void AddChildListItem(DataSet ds, string pid, int index) { int tmp = index; // 保存层级 // 计算前面的空白 string space_str = ""; for (int i = 0; i < index; i++) { space_str += "..."; } var query1 = ds.Tables[0].AsEnumerable().Where(x => x["parentid"].ToString() == pid); foreach (var item in query1) { ListItem li = new ListItem(space_str + item["name"].ToString(), item["id"].ToString()); ddl行政区域.Items.Add(li); index++; AddChildListItem(ds, item["id"].ToString(), index); index = tmp; // 还原层级 } }