counter
counter

多级联动(已知和未知级次)

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

 

 

View Code
 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         }
posted @ 2012-07-09 16:17  bfy  阅读(262)  评论(0编辑  收藏  举报