DOGNET

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 .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; }
        }

    }

 

 

posted on 2010-05-18 16:11  DOGNET  阅读(374)  评论(0编辑  收藏  举报