.net 3.5环境
页面:ExpenseType.ascx
 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ExpenseType.ascx.cs" Inherits="EM.ExpenseManager.Common.Controls.ExpenseType" %>
<asp:DropDownList ID="ddlLevel1" runat="server" DataTextField="CodeName" DataValueField="CodeNum" AutoPostBack="True"
    onselectedindexchanged="ddlLevel1_SelectedIndexChanged">
</asp:DropDownList>
<asp:DropDownList ID="ddlLevel2" runat="server" DataTextField="CodeName" DataValueField="CodeNum">
</asp:DropDownList>
代码:ExpenseType.ascx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
//using UIS = EM.ExpenseManager.Common.BaseInfoAS;
using UIS = EM.ExpenseManager.Common.UIService;
namespace EM.ExpenseManager.Common.Controls
{
    public partial class ExpenseType : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindLevel1();
                Reset();
                Reset(this.Level1SelectedIndex, this.Level2SelectedIndex);
            }
        }
        /// <summary>
        /// 绑定第一级
        /// </summary>
        public void BindLevel1()
        {
            Dictionary<string, string> list = UIS.GetExpenseTypeLevel1Cached();
            //Dictionary<string, string> list = UIS.GetExpenseTypeLevel1();
            this.ddlLevel1.Items.Clear();
            this.ddlLevel1.DataTextField = "value";
            this.ddlLevel1.DataValueField = "key";
            this.ddlLevel1.DataSource = list;
            this.ddlLevel1.DataBind();
            this.ddlLevel1.Items.Insert(0, new ListItem("请选择", "-1"));
        }
        /// <summary>
        /// 根据第一级选中项绑定第二级
        /// </summary>
        /// <param name="level1CodeNum"></param>
        private void BindLevel2(string level1CodeNum)
        {
            this.ddlLevel2.Items.Clear();
            this.ddlLevel2.Enabled = false;
            if (level1CodeNum != "-1")
            {
                Dictionary<string, string> list = UIS.GetExpenseTypeLevel2Cached(level1CodeNum);
                //Dictionary<string, string> list = UIS.GetExpenseTypeLevel2(level1CodeNum);
                if (list.Count > 0)
                {
                    this.ddlLevel2.DataTextField = "value";
                    this.ddlLevel2.DataValueField = "key";
                    this.ddlLevel2.DataSource = list;
                    this.ddlLevel2.DataBind();
                    //this.ddlLevel2.Items.Insert(0, new ListItem("请选择", "-1"));
                    this.ddlLevel2.Enabled = true;
                }
                else
                {
                    this.ddlLevel2.Enabled = false;
                }
            }
        }
        /// <summary>
        /// 设置成初始状态
        /// </summary>
        public void Reset()
        {
            this.ddlLevel1.SelectedIndex = 0;
            this.ddlLevel2.Items.Clear();
            this.ddlLevel2.Enabled = false;
            BindLevel2(this.Level1SelectedValue);
        }
        /// <summary>
        /// 设置成初始状态(指定二级索引)
        /// </summary>
        /// <param name="iIndex1"></param>
        /// <param name="iIndex2"></param>
        public void Reset(int iIndex1,int iIndex2)
        {
            this.ddlLevel1.SelectedIndex = iIndex1;
            this.ddlLevel2.Items.Clear();
            this.ddlLevel2.Enabled = false;
            BindLevel2(this.Level1SelectedValue);
            this.ddlLevel2.SelectedIndex = iIndex2;
            //正常情况下ET控件载入时第一级Enabled为true,第二级为false;
            if (this._ETEnabled != true)
            {
                this.ddlLevel1.Enabled = this._ETEnabled;
                this.ddlLevel2.Enabled = this._ETEnabled;
            }
        }
        /// <summary>
        /// 第一级选中项的Value
        /// </summary>
        public string Level1SelectedValue
        {
            get { return this.ddlLevel1.SelectedValue; }
        }
        /// <summary>
        /// 第二级选中项的Value
        /// </summary>
        public string Level2SelectedValue
        {
            get { return this.ddlLevel2.SelectedValue; }
        }
        ///// <summary>
        ///// 第二级选中项的Value(若当前级不可选则返回空串)
        ///// </summary>
        //public string Level2SelectedValue
        //{
        //    get 
        //    {
        //        if (this.ddlLevel2.Enabled == false)
        //        {
        //            return string.Empty;
        //        }
        //        else
        //        {
        //            return this.ddlLevel2.SelectedValue;
        //        }
        //    }
        //}
        ///// <summary>
        ///// 第二级选中项的Text
        ///// </summary>
        //public string Level2SelectedText
        //{
        //    get
        //    {
        //        if (this.ddlLevel2.Enabled == true)
        //        {
        //            return this.ddlLevel2.SelectedItem.Text;
        //        }
        //        else
        //        {
        //            return string.Empty;
        //        }
        //    }
        //}
        /// <summary>
        /// 第二级是否可选
        /// </summary>
        public bool Level2Enabled
        {
            get { return this.ddlLevel2.Enabled; }
        }
        /// <summary>
        /// 第-级选中项改变时重新绑定第二级
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlLevel1_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindLevel2(Level1SelectedValue);
        }
        /// <summary>
        /// 得到控件选中项的Value
        /// </summary>
        public string SelectedValue
        {
            get
            {
                if (this.Level2Enabled==true)
                {
                    return this.ddlLevel2.SelectedValue;
                }
                else 
                {
                    //若第一级也不可用则说明是通过ETEnabled=false故意将当前控件置为不可用
                    //因为默认情况下第一级是可用的
                    if (this.ddlLevel1.Enabled==false)
                    {
                        return this.ddlLevel2.SelectedValue;
                    }
                    else
                    {
                        return "-1";
                    }
                }
            }
        }
        /// <summary>
        /// 得到控件选中项的Text
        /// </summary>
        public string SelectedText
        {
            get
            {
                if (this.Level2Enabled == true)
                {
                    return this.ddlLevel2.SelectedItem.Text;
                }
                else
                {
                    if (this.ddlLevel1.Enabled == false)
                    {
                        return this.ddlLevel2.SelectedItem.Text;
                    }
                    else
                    {
                        return "-1";
                    }
                }
            }
        }
        /// <summary>
        /// 得到控件第一级选中项的Text
        /// </summary>
        public string Level1SelectedText
        {
            get
            {
                return this.ddlLevel1.SelectedItem.Text;
            }
        }
        /// <summary>
        /// 得到控件第二级选中项的Text
        /// </summary>
        public string Level2SelectedText
        {
            get
            {
                return this.ddlLevel2.SelectedItem.Text;
            }
        }
        /// <summary>
        /// 重新绑定第一级选定项
        /// </summary>
        public void RefreshItemBinding()
        {
            BindLevel1();
            Reset();
        }
        /// <summary>
        /// 选定费用类型第一级和第二级中的指定项
        /// </summary>
        /// <param name="strLevel1Value"></param>
        /// <param name="strLevel2Value"></param>
        public void SetSelectedItem(ExpenseType et, string strLevel1Value, string strLevel2Value)
        {
            et.RefreshItemBinding();
            et.Level1SelectedIndex = et.ddlLevel1.Items.IndexOf(et.ddlLevel1.Items.FindByValue(strLevel1Value));
            et.BindLevel2(strLevel1Value);
            et.Level2SelectedIndex = et.ddlLevel2.Items.IndexOf(et.ddlLevel2.Items.FindByValue(strLevel2Value));
        }
        private bool _ETEnabled = true;
        //private bool _ETEnabled;
        /// <summary>
        /// 控件是否可用
        /// </summary>
        public bool ETEnabled
        {
            get { return this._ETEnabled; }
            set { this._ETEnabled = value; }
        }
        private int _Level1SelectedIndex = 0;
        /// <summary>
        /// 得到或设置第一级的选中索引
        /// </summary>
        public int Level1SelectedIndex
        {
            get { return this._Level1SelectedIndex; }
            set { this._Level1SelectedIndex = value; }
        }
        private int _Level2SelectedIndex = 0;
        /// <summary>
        /// 得到或设置第二级的选中索引
        /// </summary>
        public int Level2SelectedIndex
        {
            get { return this._Level2SelectedIndex; }
            set { this._Level2SelectedIndex = value; }
        }
    }
} 
 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号