You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
551 lines
17 KiB
551 lines
17 KiB
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
|
|
}
|