自定义的多级联动dropdownlist的selectedvalue不变化的问题

请大家看看帮忙解决下多谢了

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.ComponentModel.Design;
using BLToolkit.Common;
//using NUnit.Framework;

namespace InfoSystem.CategoryInfo
{
    /// <summary>
    /// 用户自定义控件,可以取到第一级分类,第二级分类,第三级分类,第四级分类,第五级分类
    /// </summary>
    [ToolboxData("<{0}:SysCategoryDropDownList runat=server></{0}:SysCategoryDropDownList>")]
    //INamingContainer为子控件提供了一个新的命名范围,保证子控件的id唯一性
    public class CategoryInfoDropDownList:System.Web.UI.WebControls.WebControl,INamingContainer
    {
        private System.Web.UI.WebControls.DropDownList FirstCategory;
        private DropDownList SecondCategory;
        private DropDownList ThirdCategory;
        private DropDownList ForthCategory;
        private DropDownList FifthCategory;
       

        protected override void OnInit(EventArgs e)
        {
            InitFirstCategory();
            FirstCategory.AutoPostBack = true;
            SecondCategory.AutoPostBack = true;
            ThirdCategory.AutoPostBack = true;
            ForthCategory.AutoPostBack = true;
            FifthCategory.AutoPostBack = true;
            FirstCategory.SelectedIndexChanged += new EventHandler(FirstCategory_SelectedIndexChanged);
            SecondCategory.SelectedIndexChanged += new EventHandler(SecondCategory_SelectedIndexChanged);
            ThirdCategory.SelectedIndexChanged += new EventHandler(ThirdCategory_SelectedIndexChanged);
            ForthCategory.SelectedIndexChanged += new EventHandler(ForthCategory_SelectedIndexChanged);
        }
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]

        //定义控件的属性值
        public string SelectValue
        {
            get
            {
                if (FifthCategory.SelectedValue != "" && ForthCategory.SelectedValue != "" && ThirdCategory.SelectedValue != "" && SecondCategory.SelectedValue != "" && FirstCategory.SelectedValue != "")
                {
                    return FifthCategory.SelectedValue;
                }
                else if (FifthCategory.SelectedValue == "" && ForthCategory.SelectedValue != "" && ThirdCategory.SelectedValue != "" && SecondCategory.SelectedValue != "" && FirstCategory.SelectedValue != "")
                {
                    return ForthCategory.SelectedValue;
                }
                else if (FifthCategory.SelectedValue == "" && ForthCategory.SelectedValue == "" && ThirdCategory.SelectedValue != "" && SecondCategory.SelectedValue != "" && FirstCategory.SelectedValue != "")
                {
                    return ThirdCategory.SelectedValue;
                }
                else if (FifthCategory.SelectedValue == "" && ForthCategory.SelectedValue == "" && ThirdCategory.SelectedValue == "" && SecondCategory.SelectedValue != "" && FirstCategory.SelectedValue != "")
                {
                    return SecondCategory.SelectedValue;
                }
                else if (FifthCategory.SelectedValue == "" && ForthCategory.SelectedValue == "" && ThirdCategory.SelectedValue == "" && SecondCategory.SelectedValue == "" && FirstCategory.SelectedValue != "")
                {
                    return FirstCategory.SelectedValue;
                }
                else
                {
                    return "";
                }
            }
            set
            {
                if (value != null && value.Trim() != "" && value.Length > 0)
                {
                    if (value.Length == 4)
                    {
                        FirstCategory.SelectedValue = value;
                    }
                    else if (value.Length == 8)
                    {
                        CategoryDateBind(SecondCategory, value.Substring(0, 4));
                        FirstCategory.SelectedValue = value.Substring(0, 4);
                        SecondCategory.SelectedValue = value;
                    }
                    else if (value.Length == 12)
                    {
                        CategoryDateBind(SecondCategory, value.Substring(0, 4));
                        CategoryDateBind(ThirdCategory, value.Substring(0, 8));
                        FirstCategory.SelectedValue = value.Substring(0, 4);
                        SecondCategory.SelectedValue = value.Substring(0, 8);
                        ThirdCategory.SelectedValue = value;
                    }
                    else if (value.Length == 16)
                    {
                        CategoryDateBind(SecondCategory, value.Substring(0, 4));
                        CategoryDateBind(ThirdCategory, value.Substring(0, 8));
                        CategoryDateBind(ForthCategory, value.Substring(0, 12));
                        FirstCategory.SelectedValue = value.Substring(0, 4);
                        SecondCategory.SelectedValue = value.Substring(0, 8);
                        ThirdCategory.SelectedValue = value.Substring(0, 12);
                        ForthCategory.SelectedValue = value;
                    }
                    else if (value.Length == 20)
                    {
                        CategoryDateBind(SecondCategory, value.Substring(0, 4));
                        CategoryDateBind(ThirdCategory, value.Substring(0, 8));
                        CategoryDateBind(ForthCategory, value.Substring(0, 12));
                        CategoryDateBind(FifthCategory, value.Substring(0, 16));
                        FirstCategory.SelectedValue = value.Substring(0, 4);
                        SecondCategory.SelectedValue = value.Substring(0, 8);
                        ThirdCategory.SelectedValue = value.Substring(0, 12);
                        ForthCategory.SelectedValue = value;
                    }
                    else
                    {
                        ClearControls();
                    }

                }
                else
                {
                    ClearControls();
                }
            }
        }

 


        //初始化第一级分类的值
        public void InitFirstCategory()
        {
            EnsureChildControls();
            IList<EntitySysCategoryInfo> list = null;
            EntitySysCategoryInfo entity = FactoryHelper<EntitySysCategoryInfo>.CreateInstance();
            entity.State = "01";
            entity.level = 4;
            entity.ReturnInfoType = 2;
            list = AppFactory<AppSysCategoryInfo>.CreateInstance().ListSysCategoryInfo(entity);
            if (list.Count > 0)
            {
                FirstCategory.Items.Clear();
                FirstCategory.DataSource = list;
                FirstCategory.DataTextField = "CategoryName";
                FirstCategory.DataValueField = "CategoryID";
                FirstCategory.DataBind();
                FirstCategory.Items.Insert(0, new ListItem("请选择", ""));
            }
        }
        //第一级分类索引值改变触发的事件
        private void FirstCategory_SelectedIndexChanged(object sender, EventArgs e)
        {
            EnsureChildControls();
            if (FirstCategory.SelectedValue != "")
            {
                if (SecondCategory.Visible == false)
                {
                    SecondCategory.Visible = true;
                    if (ThirdCategory.Visible == true || ForthCategory.Visible == true || FifthCategory.Visible == true)
                    {
                        ThirdCategory.Items.Clear();
                        ForthCategory.Items.Clear();
                        FifthCategory.Items.Clear();
                        ThirdCategory.Visible = false;
                        ForthCategory.Visible = false;
                        FifthCategory.Visible = false;
                    }
                    CategoryDateBind(SecondCategory, (FirstCategory.SelectedValue).ToString());
                }
                else
                {
                    if (ThirdCategory.Visible == true || ForthCategory.Visible == true || FifthCategory.Visible == true)
                    {
                        ThirdCategory.Items.Clear();
                        ForthCategory.Items.Clear();
                        FifthCategory.Items.Clear();
                        ThirdCategory.Visible = false;
                        ForthCategory.Visible = false;
                        FifthCategory.Visible = false;
                    }
                    CategoryDateBind(SecondCategory, (FirstCategory.SelectedValue).ToString());
                }
            }
            else
            {
                if (SecondCategory.Visible==true||ThirdCategory.Visible == true || ForthCategory.Visible == true || FifthCategory.Visible == true)
                {
                    SecondCategory.Items.Clear();
                    ThirdCategory.Items.Clear();
                    ForthCategory.Items.Clear();
                    FifthCategory.Items.Clear();
                    SecondCategory.Visible = false;
                    ThirdCategory.Visible = false;
                    ForthCategory.Visible = false;
                    FifthCategory.Visible = false;
                }
            }

        }
        //第二级分类索引值改变触发的事件
        private void SecondCategory_SelectedIndexChanged(object sender, EventArgs e)
        {
            EnsureChildControls();
            if (SecondCategory.SelectedValue != "")
            {
                if (ThirdCategory.Visible == false)
                {
                    ThirdCategory.Visible = true;
                    if ( ForthCategory.Visible == true || FifthCategory.Visible == true)
                    {
                        ForthCategory.Items.Clear();
                        FifthCategory.Items.Clear();
                        ForthCategory.Visible = false;
                        FifthCategory.Visible = false;
                    }
                    CategoryDateBind(ThirdCategory, (SecondCategory.SelectedValue).ToString());
                }
                else
                {
                    if (ForthCategory.Visible == true || FifthCategory.Visible == true)
                    {
                        ForthCategory.Items.Clear();
                        FifthCategory.Items.Clear();
                        ForthCategory.Visible = false;
                        FifthCategory.Visible = false;
                    }
                    CategoryDateBind(ThirdCategory, (SecondCategory.SelectedValue).ToString());
                }
            }
            else
            {
                if (ThirdCategory.Visible == true || ForthCategory.Visible == true || FifthCategory.Visible == true)
                {
                    ThirdCategory.Items.Clear();
                    ForthCategory.Items.Clear();
                    FifthCategory.Items.Clear();
                    ThirdCategory.Visible = false;
                    ForthCategory.Visible = false;
                    FifthCategory.Visible = false;
                }
            }  

        }
        //第三级分类索引值改变触发的事件
        protected void ThirdCategory_SelectedIndexChanged(object sender, EventArgs e)
        {
            EnsureChildControls();
            if (ThirdCategory.SelectedValue != "")
            {
                if (ForthCategory.Visible == false)
                {
                    ForthCategory.Visible = true;
                    if (FifthCategory.Visible == true)
                    {
                        FifthCategory.Items.Clear();
                        FifthCategory.Visible = false;
                    }
                    CategoryDateBind(ForthCategory, (ThirdCategory.SelectedValue).ToString());
                }
                else
                {
                    if (FifthCategory.Visible == true)
                    {
                        FifthCategory.Items.Clear();
                        FifthCategory.Visible = false;
                    }
                    CategoryDateBind(ForthCategory, (ThirdCategory.SelectedValue).ToString());
                }
            }
            else
            {
                if (ForthCategory.Visible == true || FifthCategory.Visible == true)
                {
                    ForthCategory.Items.Clear();
                    FifthCategory.Items.Clear();
                    ForthCategory.Visible = false;
                    FifthCategory.Visible = false;
                }
            }
        }

        //第四级分类索引值改变触发的事件
        protected void ForthCategory_SelectedIndexChanged(object sender, EventArgs e)
        {
            EnsureChildControls();
            if (ForthCategory.SelectedValue != "")
            {
                if (FifthCategory.Visible == false)
                {
                    FifthCategory.Visible = true;
                    CategoryDateBind(FifthCategory, (ForthCategory.SelectedValue).ToString());
                }
                else
                {
                    CategoryDateBind(FifthCategory, (ForthCategory.SelectedValue).ToString());
                }
            }
            else
            {
                if (FifthCategory.Visible == true)
                {
                    FifthCategory.Items.Clear();
                    FifthCategory.Visible = false;
                }
            }
        }
      

        /// <summary>
        /// 绑定子控件的值
        /// </summary>
        /// <param name="dllname">控件名称</param>
        /// <param name="ParentId">父分类编号</param>
        private void CategoryDateBind(DropDownList dllname,string ParentId)
        {
           
            IList<EntitySysCategoryInfo> list = null;
            EntitySysCategoryInfo entity = FactoryHelper<EntitySysCategoryInfo>.CreateInstance();
            entity.State = "01";
            entity.ParentCategoryID = ParentId;
            entity.ReturnInfoType = 2;
            list = AppFactory<AppSysCategoryInfo>.CreateInstance().ListSysCategoryInfo(entity);
            if (list.Count > 0)
            {
               
                dllname.Items.Clear();
                dllname.Visible = true;
                dllname.DataSource = list;
                dllname.DataTextField = "CategoryName";
                dllname.DataValueField = "CategoryID";
                dllname.DataBind();
                dllname.Items.Insert(0, new ListItem("请选择", ""));
            }
            else
            {
                dllname.Items.Clear();
                dllname.Visible = false;
            }
        }

        //重载controls属性,取得controlcollection对象,该对象表示ui层次结构中的服务器控件的子控件
        public override ControlCollection Controls
        {
            get
            {
                //确定服务器是否包含子控件
                EnsureChildControls();
                return base.Controls;
            }
        }

        protected override void CreateChildControls()
        {
            //创建下拉列表框
            this.Controls.Clear();
            FirstCategory = new DropDownList();
            FirstCategory.ID = "FirstCategory";
            FirstCategory.Width = 100;

            SecondCategory = new DropDownList();
            SecondCategory.ID = "SecondCategory";
            SecondCategory.Visible = false;
            SecondCategory.Width = 100;

            ThirdCategory = new DropDownList();
            ThirdCategory.ID = "ThirdCategory";
            ThirdCategory.Visible = false;
            ThirdCategory.Width = 100;

            ForthCategory = new DropDownList();
            ForthCategory.ID = "ForthCategory";
            ForthCategory.Visible = false;
            ForthCategory.Width = 100;

            FifthCategory = new DropDownList();
            FifthCategory.ID = "FifthCategory";
            FifthCategory.Visible = false;
            FifthCategory.Width = 100;

            this.Controls.Add(FirstCategory);
            this.Controls.Add(SecondCategory);
            this.Controls.Add(ThirdCategory);
            this.Controls.Add(ForthCategory);
            this.Controls.Add(FifthCategory);

            base.CreateChildControls();

        }

        /// <summary>
        /// 将此控件呈现给指定的输出参数。
        /// </summary>
        /// <param name="output"> 要写出到的 html 编写器 </param>
        protected override void Render(HtmlTextWriter output)
        {
            //将要呈现的html属性添加到指定的system.web.htmltextwriter中
            AddAttributesToRender(output);
            output.AddAttribute(System.Web.UI.HtmlTextWriterAttribute.Cellpadding,"0",false);

            //制定一个表,把子控件排在一行上
            output.RenderBeginTag(HtmlTextWriterTag.Table);
            output.RenderBeginTag(HtmlTextWriterTag.Tr);

            //第一级分类下拉列表框
            output.RenderBeginTag(HtmlTextWriterTag.Td);
            FirstCategory.RenderControl(output);
            output.RenderEndTag();


            output.RenderBeginTag(HtmlTextWriterTag.Td);
            output.RenderEndTag();

            //第二级分类下拉列表框
            output.RenderBeginTag(HtmlTextWriterTag.Td);
            SecondCategory.RenderControl(output);
            output.RenderEndTag();

           
            output.RenderBeginTag(HtmlTextWriterTag.Td);
            output.RenderEndTag();

            //第三级分类下拉列表框
            output.RenderBeginTag(HtmlTextWriterTag.Td);
            ThirdCategory.RenderControl(output);
            output.RenderEndTag();

          
            output.RenderBeginTag(HtmlTextWriterTag.Td);
            output.RenderEndTag();

            //第四级分类下拉列表框
            output.RenderBeginTag(HtmlTextWriterTag.Td);
            ForthCategory.RenderControl(output);
            output.RenderEndTag();

           
            output.RenderBeginTag(HtmlTextWriterTag.Td);
            output.RenderEndTag();

            //第五级分类下拉列表框
            output.RenderBeginTag(HtmlTextWriterTag.Td);
            FifthCategory.RenderControl(output);
            output.RenderEndTag();

          
            output.RenderBeginTag(HtmlTextWriterTag.Td);
            output.RenderEndTag();

 

            output.RenderEndTag();
            output.RenderEndTag();
        }

        //清除控件里所有下拉列表框的值
        public void ClearControls()
        {
            SecondCategory.Items.Clear();
            ThirdCategory.Items.Clear();
            ForthCategory.Items.Clear();
            FifthCategory.Items.Clear();
        }
        public void ClearSelectedValue()
        {
            if (SecondCategory.SelectedValue != "")
            {
                SecondCategory.Items.Clear();
            }
            if (ThirdCategory.SelectedValue != "")
            {
                ThirdCategory.SelectedValue = "";
                ThirdCategory.Items.Clear();
            }
            if (ForthCategory.SelectedValue != "")
            {
                ForthCategory.SelectedValue = "";
                ForthCategory.Items.Clear();
            }
            if (FifthCategory.SelectedValue != "")
            {
                FifthCategory.SelectedValue = "";
                FifthCategory.Items.Clear();
            }
        }
    }

}

转载于:https://www.cnblogs.com/lksa/archive/2010/06/02/1749823.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值