|
|
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Web.UI.WebControls; using System.ComponentModel; using System.Data.SqlClient; using System.Text; using DBUtility;
#region histroy
///程式代號:UCDropDownList
///程式名稱:系統共用下拉選單
///程式說明:
///xx.YYYY/MM/DD VER AUTHOR COMMENTS(說明修改的內容)
///01.2012/08/10 1.0 Ethan CREATE
///02.2014/03/05 1.1 Dean _FullText 改為如果有|| 符號則前面的為文字後面的為值
#endregion
namespace OT.Controls { public class DropDownList : System.Web.UI.WebControls.DropDownList { #region Declare Region
private Boolean _IsSubTextLength = false; //是否截取Text長度
private int _TextLength = 30; //文字的最大長度
private BindType _IsShowFullText = BindType.No; //是否設置'全部'
private string _FullText = "請選擇..."; //未選擇時的的預設第一個值設定
private Boolean _IsValueOrText = true; //是否相反顯示Text或Value值(True:text-value,False:Value-text)
private Boolean _IsHtmlDecode = false; //是否將顯示的Text值HtmlDecode加碼
private DropDownListType _DrpType = DropDownListType.None; //下拉框類別
private TextType _IsShowID = TextType.No; //是否顯示ID
private string _selectedtext = string.Empty; //設定下拉框選中的Text值
private string parameterValue; //SQL參數
private static readonly object EventUCInit = new object(); #endregion
#region Property Region
#region IsSubTextLength
/// <summary>
/// 是否截取文字顯示的最大長度. 預設30
/// </summary>
[Category("Behavior"), DefaultValue(false), Description("是否截取文字顯示的最大長度. 預設30")] public Boolean IsSubTextLength { get { return _IsSubTextLength; } set { _IsSubTextLength = value; } } #endregion
#region TextLength
/// <summary>
/// 文字顯示的最大長度
/// </summary>
[Category("Behavior"), DefaultValue(30), Description("文字顯示的最大長度")] public int TextLength { get { return _TextLength; } set { _TextLength = value; } } #endregion
#region IsShowFullText
/// <summary>
/// 是否顯示'全部'選項
/// </summary>
[Category("Behavior"), DefaultValue(BindType.No), Description("是否顯示'全部'選項")] public BindType IsShowFullText { get { return _IsShowFullText; } set { _IsShowFullText = value; } } #endregion
#region FullText
/// <summary>
/// 『全部』的客制化設定
/// </summary>
[Category("Behavior"), DefaultValue("請選擇"), Description("『全部』的客制化設定")] public string FullText { get { return _FullText; } set { _FullText = value; } } #endregion
#region IsValueOrText
/// <summary>
/// 是否相反顯示Text或Value
/// </summary>
[Category("Behavior"), DefaultValue(true), Description("text 顯示格式,需要和IsShowID配合使用 true:value - text;false:text - value")] public Boolean IsValueOrText { get { return _IsValueOrText; } set { _IsValueOrText = value; } } #endregion
#region IsHtmlDecode
/// <summary>
/// 是否將顯示的Text值HtmlDecode加碼
/// </summary>
[Category("Behavior"), DefaultValue(false), Description("是否將顯示的Text值HtmlDecode加碼")] public Boolean IsHtmlDecode { get { return _IsHtmlDecode; } set { _IsHtmlDecode = value; } } #endregion
#region DrpType
/// <summary>
/// 下拉框類別
/// </summary>
[Category("Behavior"), DefaultValue(DropDownListType.None), Description("下拉框類別")] public DropDownListType DrpType { get { return _DrpType; } set { _DrpType = value; if (_DrpType != DropDownListType.None) { BindDrp(); } } } #endregion
#region IsShowID
/// <summary>
/// 是否設置ID
/// </summary>
[Category("Behavior"), DefaultValue(TextType.No), Description("是否設置顯示'ID'")] public TextType IsShowID { get { return _IsShowID; } set { _IsShowID = value; } } #endregion
#region SelectedText
/// <summary>
/// 設定下拉框選中的Text值
/// </summary>
[Category("Behavior"), DefaultValue(""), Description("讀取或設定下拉框選中的Text值")] public string SelectedText { get { return base.SelectedItem.Text; } set { bool b_Flag = true; foreach (System.Web.UI.WebControls.ListItem li in this.Items) { li.Selected = false; if (li.Text.Equals(value)) { li.Selected = true; b_Flag = false; } } if (b_Flag) this.SelectedIndex = 0; } } #endregion
#region SelectedValue
/// <summary>
/// 設定下拉框選中的Value值"
/// </summary>
public override string SelectedValue { get { return base.SelectedValue; } set { if (base.Items.FindByValue(value) != null) { base.SelectedValue = value; } else { base.SelectedIndex = 0; } } } #endregion
#region Value
/// <summary>
/// 設定下拉框選中的Value值
/// </summary>
[Category("Behavior"), DefaultValue(""), Description("讀取或設定下拉框選中的Value值")] public string Value { get { return this.SelectedValue; } set { this.SelectedValue = value; } } #endregion
public override Unit Width { set { base.Width = value; } get { return base.Width; } }
public string ParameterValue { get { return parameterValue; } set { parameterValue = value; } }
public event EventHandler UCInit { add { base.Events.AddHandler(EventUCInit, value); } remove { base.Events.RemoveHandler(EventUCInit, value); } } #endregion
#region Definition Private Methods
protected virtual void OnUCInit(EventArgs e) { EventHandler handler = (EventHandler)Events[EventUCInit];
if (handler != null) { handler(this, e); } }
/// <summary>
/// 複寫OnInit方法
/// </summary>
/// <param name="e"></param>
protected override void OnInit(EventArgs e) { try { base.OnInit(e); OnUCInit(EventArgs.Empty); if (_DrpType != DropDownListType.None) BindDrp(); } catch (Exception ex) { throw new Exception(ex.ToString()); } }
/// <summary>
/// 綁定下拉框
/// </summary>
public void BindDrp() { this.Items.Clear(); if (this.Page != null) { if (this.Page.Site != null && this.Page.Site.DesignMode) { return; } } //獲取SQL語句
string strSQL = getSQL(); if (strSQL == "") { strSQL = "SELECT '' [A], '' [B]"; } DataTable o_dt = DbHelperSQL.Query(strSQL).Tables[0]; if (o_dt != null && o_dt.Rows.Count > 0) { foreach (DataRow row in o_dt.Rows) { string strValue = row[0].ToString(); string strText = row[1].ToString(); string strFullText = string.Empty; if (IsShowID == TextType.Yes) { if (IsValueOrText) { strText = strValue + " - " + strText; } else { strText = strText + " - " + strValue; } }
if (IsHtmlDecode) { //如果需要HtmlDecode編碼
strText = HttpUtility.HtmlDecode(strText); } strFullText = strText; if (IsSubTextLength && strText.Length > TextLength) { if (TextLength > 3) { strText = strText.Substring(0, TextLength - 3) + "..."; } else { strText = strText.Substring(0, TextLength) + "..."; } } ListItem item = new ListItem(strText, strValue); item.Attributes.Add("title", strFullText); this.Items.Add(item); } } ///2014/03/05 1.1 Dean _FullText 改為如果有|| 符號則前面的為文字後面的為值
if (IsShowFullText == BindType.Yes) { if (FullText.IndexOf("||") > 0) { this.Items.Insert(0, new System.Web.UI.WebControls.ListItem(FullText.Split(new string[] { "||" }, StringSplitOptions.RemoveEmptyEntries).GetValue(0).ToString(), FullText.Split(new string[] { "||" }, StringSplitOptions.RemoveEmptyEntries).GetValue(1).ToString())); } else { this.Items.Insert(0, new System.Web.UI.WebControls.ListItem(FullText, "")); } } } /// <summary>
/// 查詢SQL語句
/// </summary>
/// <returns>strSQL</returns>
private string getSQL() { string strSQL = ""; switch (DrpType) { case DropDownListType.None://暫時無效列表 Add by Ethan, 2012/08/17.
strSQL = " SELECT ArgumentClassID,ArgumentClassName FROM OTB_SYS_Argumentclass WHERE Effective='1' "; break; case DropDownListType.ArgumentClassList://參數類別有效列表,主要用於新增時全選的地方 Add by Ethan, 2012/08/17.
strSQL = " SELECT ArgumentClassID,ArgumentClassName FROM OTB_SYS_Argumentclass WHERE Effective='Y' AND DelStatus='N' ORDER BY OrderByValue "; break; case DropDownListType.ArgumentClassListAll://參數類別全部列表 Add by Alina, 2012/11/21.
strSQL = " SELECT ArgumentClassID,ArgumentClassName FROM OTB_SYS_Argumentclass WHERE Effective='Y' ORDER BY OrderByValue "; break; case DropDownListType.RoleList://角色信息有效列表 Add by Ethan, 2012/08/20.
strSQL = " SELECT RuleID,RuleName FROM OTB_SYS_Rules WHERE DelStatus='N' ORDER BY RuleID "; break; case DropDownListType.ModuleList://模組維護信息列表 Add by Alina,模組選擇上層代碼時 2012/08/20.
strSQL = " SELECT ModuleID,ModuleName FROM OTB_SYS_ModuleList ORDER BY OrderByValue"; break; case DropDownListType.Department://部門有效列表 Add by Alina, 職稱中會選擇部門 2013/11/20.
strSQL = " SELECT DepartmentID,DepartmentName FROM OTB_SYS_Departments WHERE Effective='Y' ORDER BY DepartmentID "; break; case DropDownListType.ChiefID://主管代號 Add by Jack, 2014/07/21.
strSQL = "SELECT MemberID,MemberName FROM dbo.OTB_SYS_Members AS b LEFT JOIN dbo.OTB_SYS_Jobtitle AS j ON b.JobTitleID=j.JobtitleID WHERE j.JobtitleID='001'"; break; case DropDownListType.DeptIDList: //部門信息列表 Add by John, 職稱部分需要當查詢條件2012/11/26.
strSQL = " SELECT DepartmentID,DepartmentName FROM OTB_SYS_Departments WHERE Effective='Y' ORDER BY DepartmentName"; break; case DropDownListType.JobtitleList://職稱信息列表 Add by John,人員處需要該部分 2013/11/26.
strSQL = " SELECT JobtitleID,JobtitleName AS JobtitleName FROM OTB_SYS_Jobtitle WHERE Effective='Y' ORDER BY JobtitleName"; break; case DropDownListType.MemberList://人員信息列表 Add by John,人員處需要該部分 2013/11/26.
strSQL = " SELECT MemberID ,MemberName FROM dbo.OTB_SYS_Members "; break; case DropDownListType.JobClass://工作類別列表 Add by Alina,人員處需要該部分 2015/7/29.
strSQL = " SELECT ArgumentID,ArgumentValue FROM dbo.OTB_SYS_Arguments WHERE Effective='Y' AND DelStatus='N' AND ArgumentClassID='JobClass' "; break; case DropDownListType.TableDirectory://資料表列表 Add by Gary 20141013
strSQL = " select distinct form_id as Table_NameC,form_id as Table_NameE from OTB_SYS_TableDirectory order by form_id "; break;
} return strSQL; } #endregion
#region Definition Public Methods
#endregion
}
#region 枚舉類型
/// <summary>
/// 是否顯示未選擇
/// </summary>
public enum BindType { /// <summary>
/// 否
/// </summary>
No, /// <summary>
/// 是
/// </summary>
Yes } /// <summary>
/// 下拉框類別枚舉
/// </summary>
public enum DropDownListType { #region 枚舉類型
/// <summary>
/// 0、預設
/// </summary>
None = 0, /// <summary>
/// 參數類別有效列表
/// </summary>
ArgumentClassList, /// <summary>
/// 參數類別全部列表
/// </summary>
ArgumentClassListAll, /// <summary>
/// 角色信息有效列表
/// </summary>
RoleList, /// <summary>
/// 模組維護信息列表
/// </summary>
ModuleList, ///<summary>
///部門列表
///</summary>
Department, /// <summary>
/// 部門信息列表
/// </summary>
DeptIDList, /// <summary>
/// 職稱信息列表
/// </summary>
JobtitleList, ///<summary>
///主管代號 //Add By Jack 2014/07/21
///</summary>
ChiefID, ///<summary>
///人員信息列表
///</summary>
MemberList, /// <summary>
/// 工作類別
/// </summary>
JobClass, /// <summary>
/// 資料表列表
/// </summary>
TableDirectory, #endregion
} /// <summary>
/// 是否顯示代號,當查詢到BSYSDATA里的數據時用此屬性
/// </summary>
public enum TextType { /// <summary>
/// 是顯示
/// </summary>
Yes, /// <summary>
/// 否不顯示
/// </summary>
No }
#endregion
}
|