多级联动(已知和未知级次)
1.已知三级联动
2.未知级次
/// <summary> /// 下拉框信息实体类。 /// </summary> public class JQSelectCol { public string Name { get; set; } public string Code { get; set; } } #region 数据源 private List<Entity.JQSelectCol> GetSelectDataByParentCode(string parentCode) { return Categories.GetCategoriesByParentCode(parentCode).Select(c => new Entity.JQSelectCol() { Code = c.Code, Name = c.Name }).ToList(); } #endregion #region 级联Select #region 根据数据生成Select private void AddLinkSelect(List<Entity.JQSelectCol> selectList) { if (selectList == null || selectList.Count == 0) return; HtmlSelect newDdl = new HtmlSelect(); newDdl.Attributes.Add("onchange", "LinkNext(this)"); SetSelectDataBindWithAll(newDdl, selectList); divCategories.Controls.Add(newDdl); } private void AddLinkSelect(List<Entity.JQSelectCol> selectList, string selectValue) { if (selectList == null || selectList.Count == 0) return; HtmlSelect newDdl = new HtmlSelect(); newDdl.Attributes.Add("onchange", "LinkNext(this)"); SetSelectDataBindWithAll(newDdl, selectList); int index = 0; for (int i = 0; i < selectList.Count(); i++) { if (selectList[i].Code == selectValue) { index = i; break; } } newDdl.SelectedIndex = index; divCategories.Controls.Add(newDdl); } #endregion #region PostBack protected void btnChange_Click(object sender, EventArgs e) { GenerateSelectList(); txtCategoryCode.Text = GetCurrentCode(); } #endregion #region 生成联动Select主流程 private void GenerateSelectList() { string currentCode = GetCurrentCode(); if (!string.IsNullOrEmpty(currentCode)) { List<string> parentCodeList = new List<string>(); parentCodeList.Add(string.Empty); parentCodeList.AddRange(GetConditions()); for (int i = 0; i < parentCodeList.Count - 1; i++) { AddSelectByParentAndCode(parentCodeList[i], parentCodeList[i + 1]); if (parentCodeList[i + 1] == currentCode) break; } } AddFinalSelect(currentCode); } #endregion #region 计算查询项 private string GetCurrentCode() { string selectCode = GetSelectCode(); if (selectCode == "-1") { List<string> conditions = GetConditions(); for (int i = 0; i < conditions.Count; i++) { if (conditions[i] == "-1") { if (i > 0) selectCode = conditions[i - 1]; else selectCode = string.Empty; break; } } } return selectCode; } #endregion #region 根据选择状态创建Select private void AddSelectByParentAndCode(string parentCode, string currentCode) { List<Entity.JQSelectCol> selectDataList = GetSelectDataByParentCode(parentCode); AddLinkSelect(selectDataList, currentCode); } private void AddFinalSelect(string parentCode) { List<Entity.JQSelectCol> selectDataList = GetSelectDataByParentCode(parentCode); AddLinkSelect(selectDataList); } #endregion #region 绑定Select方法 private void SetSelectDataBindWithAll(HtmlSelect select, List<Entity.JQSelectCol> selectDataList) { selectDataList.Insert(0, new Entity.JQSelectCol() { Code = "-1", Name = "全部" }); SetSelectDataBind(select, selectDataList); } private void SetSelectDataBind(HtmlSelect select, List<Entity.JQSelectCol> selectDataList) { select.DataSource = selectDataList; select.DataTextField = "Name"; select.DataValueField = "Code"; select.DataBind(); } #endregion
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 protected void ucSchoolList_SelectedChanged(object sender, EventArgs e) 2 { 3 LoadDept(ucSchoolList.SelectedSchoolId, string.Empty); 4 LoadProject(ddlDept.SelectedValue, string.Empty); 5 LoadClassType(ddlProject.SelectedValue, string.Empty); 6 } 7 8 /// <summary> 9 /// 加载指定学校下的部门列表 10 /// </summary> 11 private void LoadDept(int schoolId, string deptCode) 12 { 13 //根据权限取部门 14 if (this.PedigreeDeptCode == null || this.PedigreeDeptCode.Count == 0 || this.PedigreeDeptCode.Contains(string.Empty) || this.PedigreeDeptCode.Contains(null)) 15 { 16 ddlDept.DataSource = Dept.GetDeptBySchoolId(schoolId); 17 } 18 else 19 { 20 ddlDept.DataSource = Dept.GetDeptBySchoolId(schoolId).Where(c => this.PedigreeDeptCode.Contains(c.FCode)); 21 } 22 ddlDept.DataTextField = "Name"; 23 ddlDept.DataValueField = "Code"; 24 ddlDept.DataBind(); 25 26 ListItem item = new ListItem(); 27 item.Text = "全部"; 28 item.Value = "-111"; 29 ddlDept.Items.Insert(0, item); 30 31 if (!string.IsNullOrEmpty(deptCode)) 32 { 33 ddlDept.SelectedValue = deptCode; 34 } 35 } 36 37 /// <summary> 38 /// 加载指定部门下的项目列表 39 /// </summary> 40 private void LoadProject(string deptCode, string projectCode) 41 { 42 //根据权限取项目 43 if (this.PedigreeProjectCode == null || this.PedigreeProjectCode.Count == 0 || this.PedigreeProjectCode.Contains(string.Empty) || this.PedigreeProjectCode.Contains(null)) 44 { 45 ddlProject.DataSource = Project.GetEnabledProjectByDeptCode(deptCode); 46 } 47 else 48 { 49 ddlProject.DataSource = Project.GetEnabledProjectByDeptCode(deptCode).Where(c => this.PedigreeProjectCode.Contains(c.FCode)); 50 } 51 ddlProject.DataTextField = "Name"; 52 ddlProject.DataValueField = "Code"; 53 ddlProject.DataBind(); 54 55 ListItem item = new ListItem(); 56 item.Text = "全部"; 57 item.Value = "-111"; 58 ddlProject.Items.Insert(0, item); 59 60 if (!string.IsNullOrEmpty(projectCode)) 61 { 62 ddlProject.SelectedValue = projectCode; 63 } 64 } 65 66 /// <summary> 67 /// 加载指定项目下的班型列表 68 /// </summary> 69 private void LoadClassType(string projectCode, string classtypeCode) 70 { 71 ddlClassType.DataSource = ClassType.GetEnabledClassTypeByProjectCode(projectCode); 72 ddlClassType.DataTextField = "Name"; 73 ddlClassType.DataValueField = "Code"; 74 ddlClassType.DataBind(); 75 76 ListItem item = new ListItem(); 77 item.Text = "全部"; 78 item.Value = "-111"; 79 ddlClassType.Items.Insert(0, item); 80 81 if (!string.IsNullOrEmpty(classtypeCode)) 82 { 83 ddlClassType.SelectedValue = classtypeCode; 84 } 85 } 86 87 protected void ddlDept_SelectedIndexChanged(object sender, EventArgs e) 88 { 89 //加载项目和班型 90 LoadProject(ddlDept.SelectedValue, string.Empty); 91 //LoadClassType(ddlProject.SelectedValue, string.Empty); 92 } 93 94 protected void ddlProject_SelectedIndexChanged(object sender, EventArgs e) 95 { 96 //加载班型 97 LoadClassType(ddlProject.SelectedValue, string.Empty); 98 }