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