请大家看看帮忙解决下多谢了
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();
}
}
}
}