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

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Data;
  6. using System.Web.UI.WebControls;
  7. using System.ComponentModel;
  8. using System.Data.SqlClient;
  9. using System.Text;
  10. using DBUtility;
  11. #region histroy
  12. ///程式代號:UCDropDownList
  13. ///程式名稱:系統共用下拉選單
  14. ///程式說明:
  15. ///xx.YYYY/MM/DD VER AUTHOR COMMENTS(說明修改的內容)
  16. ///01.2012/08/10 1.0 Ethan CREATE
  17. ///02.2014/03/05 1.1 Dean _FullText 改為如果有|| 符號則前面的為文字後面的為值
  18. #endregion
  19. namespace OT.Controls
  20. {
  21. public class DropDownList : System.Web.UI.WebControls.DropDownList
  22. {
  23. #region Declare Region
  24. private Boolean _IsSubTextLength = false; //是否截取Text長度
  25. private int _TextLength = 30; //文字的最大長度
  26. private BindType _IsShowFullText = BindType.No; //是否設置'全部'
  27. private string _FullText = "請選擇..."; //未選擇時的的預設第一個值設定
  28. private Boolean _IsValueOrText = true; //是否相反顯示Text或Value值(True:text-value,False:Value-text)
  29. private Boolean _IsHtmlDecode = false; //是否將顯示的Text值HtmlDecode加碼
  30. private DropDownListType _DrpType = DropDownListType.None; //下拉框類別
  31. private TextType _IsShowID = TextType.No; //是否顯示ID
  32. private string _selectedtext = string.Empty; //設定下拉框選中的Text值
  33. private string parameterValue; //SQL參數
  34. private static readonly object EventUCInit = new object();
  35. #endregion
  36. #region Property Region
  37. #region IsSubTextLength
  38. /// <summary>
  39. /// 是否截取文字顯示的最大長度. 預設30
  40. /// </summary>
  41. [Category("Behavior"),
  42. DefaultValue(false),
  43. Description("是否截取文字顯示的最大長度. 預設30")]
  44. public Boolean IsSubTextLength
  45. {
  46. get
  47. {
  48. return _IsSubTextLength;
  49. }
  50. set
  51. {
  52. _IsSubTextLength = value;
  53. }
  54. }
  55. #endregion
  56. #region TextLength
  57. /// <summary>
  58. /// 文字顯示的最大長度
  59. /// </summary>
  60. [Category("Behavior"),
  61. DefaultValue(30),
  62. Description("文字顯示的最大長度")]
  63. public int TextLength
  64. {
  65. get { return _TextLength; }
  66. set { _TextLength = value; }
  67. }
  68. #endregion
  69. #region IsShowFullText
  70. /// <summary>
  71. /// 是否顯示'全部'選項
  72. /// </summary>
  73. [Category("Behavior"),
  74. DefaultValue(BindType.No),
  75. Description("是否顯示'全部'選項")]
  76. public BindType IsShowFullText
  77. {
  78. get
  79. {
  80. return _IsShowFullText;
  81. }
  82. set
  83. {
  84. _IsShowFullText = value;
  85. }
  86. }
  87. #endregion
  88. #region FullText
  89. /// <summary>
  90. /// 『全部』的客制化設定
  91. /// </summary>
  92. [Category("Behavior"),
  93. DefaultValue("請選擇"),
  94. Description("『全部』的客制化設定")]
  95. public string FullText
  96. {
  97. get { return _FullText; }
  98. set { _FullText = value; }
  99. }
  100. #endregion
  101. #region IsValueOrText
  102. /// <summary>
  103. /// 是否相反顯示Text或Value
  104. /// </summary>
  105. [Category("Behavior"),
  106. DefaultValue(true),
  107. Description("text 顯示格式,需要和IsShowID配合使用 true:value - text;false:text - value")]
  108. public Boolean IsValueOrText
  109. {
  110. get
  111. {
  112. return _IsValueOrText;
  113. }
  114. set
  115. {
  116. _IsValueOrText = value;
  117. }
  118. }
  119. #endregion
  120. #region IsHtmlDecode
  121. /// <summary>
  122. /// 是否將顯示的Text值HtmlDecode加碼
  123. /// </summary>
  124. [Category("Behavior"),
  125. DefaultValue(false),
  126. Description("是否將顯示的Text值HtmlDecode加碼")]
  127. public Boolean IsHtmlDecode
  128. {
  129. get
  130. {
  131. return _IsHtmlDecode;
  132. }
  133. set
  134. {
  135. _IsHtmlDecode = value;
  136. }
  137. }
  138. #endregion
  139. #region DrpType
  140. /// <summary>
  141. /// 下拉框類別
  142. /// </summary>
  143. [Category("Behavior"),
  144. DefaultValue(DropDownListType.None),
  145. Description("下拉框類別")]
  146. public DropDownListType DrpType
  147. {
  148. get
  149. {
  150. return _DrpType;
  151. }
  152. set
  153. {
  154. _DrpType = value;
  155. if (_DrpType != DropDownListType.None)
  156. {
  157. BindDrp();
  158. }
  159. }
  160. }
  161. #endregion
  162. #region IsShowID
  163. /// <summary>
  164. /// 是否設置ID
  165. /// </summary>
  166. [Category("Behavior"),
  167. DefaultValue(TextType.No),
  168. Description("是否設置顯示'ID'")]
  169. public TextType IsShowID
  170. {
  171. get
  172. {
  173. return _IsShowID;
  174. }
  175. set
  176. {
  177. _IsShowID = value;
  178. }
  179. }
  180. #endregion
  181. #region SelectedText
  182. /// <summary>
  183. /// 設定下拉框選中的Text值
  184. /// </summary>
  185. [Category("Behavior"),
  186. DefaultValue(""),
  187. Description("讀取或設定下拉框選中的Text值")]
  188. public string SelectedText
  189. {
  190. get
  191. {
  192. return base.SelectedItem.Text;
  193. }
  194. set
  195. {
  196. bool b_Flag = true;
  197. foreach (System.Web.UI.WebControls.ListItem li in this.Items)
  198. {
  199. li.Selected = false;
  200. if (li.Text.Equals(value))
  201. {
  202. li.Selected = true;
  203. b_Flag = false;
  204. }
  205. }
  206. if (b_Flag)
  207. this.SelectedIndex = 0;
  208. }
  209. }
  210. #endregion
  211. #region SelectedValue
  212. /// <summary>
  213. /// 設定下拉框選中的Value值"
  214. /// </summary>
  215. public override string SelectedValue
  216. {
  217. get
  218. {
  219. return base.SelectedValue;
  220. }
  221. set
  222. {
  223. if (base.Items.FindByValue(value) != null)
  224. {
  225. base.SelectedValue = value;
  226. }
  227. else
  228. {
  229. base.SelectedIndex = 0;
  230. }
  231. }
  232. }
  233. #endregion
  234. #region Value
  235. /// <summary>
  236. /// 設定下拉框選中的Value值
  237. /// </summary>
  238. [Category("Behavior"),
  239. DefaultValue(""),
  240. Description("讀取或設定下拉框選中的Value值")]
  241. public string Value
  242. {
  243. get
  244. {
  245. return this.SelectedValue;
  246. }
  247. set
  248. {
  249. this.SelectedValue = value;
  250. }
  251. }
  252. #endregion
  253. public override Unit Width
  254. {
  255. set
  256. {
  257. base.Width = value;
  258. }
  259. get
  260. {
  261. return base.Width;
  262. }
  263. }
  264. public string ParameterValue
  265. {
  266. get { return parameterValue; }
  267. set { parameterValue = value; }
  268. }
  269. public event EventHandler UCInit
  270. {
  271. add
  272. {
  273. base.Events.AddHandler(EventUCInit, value);
  274. }
  275. remove
  276. {
  277. base.Events.RemoveHandler(EventUCInit, value);
  278. }
  279. }
  280. #endregion
  281. #region Definition Private Methods
  282. protected virtual void OnUCInit(EventArgs e)
  283. {
  284. EventHandler handler = (EventHandler)Events[EventUCInit];
  285. if (handler != null)
  286. {
  287. handler(this, e);
  288. }
  289. }
  290. /// <summary>
  291. /// 複寫OnInit方法
  292. /// </summary>
  293. /// <param name="e"></param>
  294. protected override void OnInit(EventArgs e)
  295. {
  296. try
  297. {
  298. base.OnInit(e);
  299. OnUCInit(EventArgs.Empty);
  300. if (_DrpType != DropDownListType.None)
  301. BindDrp();
  302. }
  303. catch (Exception ex)
  304. {
  305. throw new Exception(ex.ToString());
  306. }
  307. }
  308. /// <summary>
  309. /// 綁定下拉框
  310. /// </summary>
  311. public void BindDrp()
  312. {
  313. this.Items.Clear();
  314. if (this.Page != null)
  315. {
  316. if (this.Page.Site != null && this.Page.Site.DesignMode)
  317. {
  318. return;
  319. }
  320. }
  321. //獲取SQL語句
  322. string strSQL = getSQL();
  323. if (strSQL == "")
  324. {
  325. strSQL = "SELECT '' [A], '' [B]";
  326. }
  327. DataTable o_dt = DbHelperSQL.Query(strSQL).Tables[0];
  328. if (o_dt != null && o_dt.Rows.Count > 0)
  329. {
  330. foreach (DataRow row in o_dt.Rows)
  331. {
  332. string strValue = row[0].ToString();
  333. string strText = row[1].ToString();
  334. string strFullText = string.Empty;
  335. if (IsShowID == TextType.Yes)
  336. {
  337. if (IsValueOrText)
  338. {
  339. strText = strValue + " - " + strText;
  340. }
  341. else
  342. {
  343. strText = strText + " - " + strValue;
  344. }
  345. }
  346. if (IsHtmlDecode)
  347. {
  348. //如果需要HtmlDecode編碼
  349. strText = HttpUtility.HtmlDecode(strText);
  350. }
  351. strFullText = strText;
  352. if (IsSubTextLength && strText.Length > TextLength)
  353. {
  354. if (TextLength > 3)
  355. {
  356. strText = strText.Substring(0, TextLength - 3) + "...";
  357. }
  358. else
  359. {
  360. strText = strText.Substring(0, TextLength) + "...";
  361. }
  362. }
  363. ListItem item = new ListItem(strText, strValue);
  364. item.Attributes.Add("title", strFullText);
  365. this.Items.Add(item);
  366. }
  367. }
  368. ///2014/03/05 1.1 Dean _FullText 改為如果有|| 符號則前面的為文字後面的為值
  369. if (IsShowFullText == BindType.Yes)
  370. {
  371. if (FullText.IndexOf("||") > 0)
  372. {
  373. 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()));
  374. }
  375. else
  376. {
  377. this.Items.Insert(0, new System.Web.UI.WebControls.ListItem(FullText, ""));
  378. }
  379. }
  380. }
  381. /// <summary>
  382. /// 查詢SQL語句
  383. /// </summary>
  384. /// <returns>strSQL</returns>
  385. private string getSQL()
  386. {
  387. string strSQL = "";
  388. switch (DrpType)
  389. {
  390. case DropDownListType.None://暫時無效列表 Add by Ethan, 2012/08/17.
  391. strSQL = " SELECT ArgumentClassID,ArgumentClassName FROM OTB_SYS_Argumentclass WHERE Effective='1' ";
  392. break;
  393. case DropDownListType.ArgumentClassList://參數類別有效列表,主要用於新增時全選的地方 Add by Ethan, 2012/08/17.
  394. strSQL = " SELECT ArgumentClassID,ArgumentClassName FROM OTB_SYS_Argumentclass WHERE Effective='Y' AND DelStatus='N' ORDER BY OrderByValue ";
  395. break;
  396. case DropDownListType.ArgumentClassListAll://參數類別全部列表 Add by Alina, 2012/11/21.
  397. strSQL = " SELECT ArgumentClassID,ArgumentClassName FROM OTB_SYS_Argumentclass WHERE Effective='Y' ORDER BY OrderByValue ";
  398. break;
  399. case DropDownListType.RoleList://角色信息有效列表 Add by Ethan, 2012/08/20.
  400. strSQL = " SELECT RuleID,RuleName FROM OTB_SYS_Rules WHERE DelStatus='N' ORDER BY RuleID ";
  401. break;
  402. case DropDownListType.ModuleList://模組維護信息列表 Add by Alina,模組選擇上層代碼時 2012/08/20.
  403. strSQL = " SELECT ModuleID,ModuleName FROM OTB_SYS_ModuleList ORDER BY OrderByValue";
  404. break;
  405. case DropDownListType.Department://部門有效列表 Add by Alina, 職稱中會選擇部門 2013/11/20.
  406. strSQL = " SELECT DepartmentID,DepartmentName FROM OTB_SYS_Departments WHERE Effective='Y' ORDER BY DepartmentID ";
  407. break;
  408. case DropDownListType.ChiefID://主管代號 Add by Jack, 2014/07/21.
  409. 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'";
  410. break;
  411. case DropDownListType.DeptIDList: //部門信息列表 Add by John, 職稱部分需要當查詢條件2012/11/26.
  412. strSQL = " SELECT DepartmentID,DepartmentName FROM OTB_SYS_Departments WHERE Effective='Y' ORDER BY DepartmentName";
  413. break;
  414. case DropDownListType.JobtitleList://職稱信息列表 Add by John,人員處需要該部分 2013/11/26.
  415. strSQL = " SELECT JobtitleID,JobtitleName AS JobtitleName FROM OTB_SYS_Jobtitle WHERE Effective='Y' ORDER BY JobtitleName";
  416. break;
  417. case DropDownListType.MemberList://人員信息列表 Add by John,人員處需要該部分 2013/11/26.
  418. strSQL = " SELECT MemberID ,MemberName FROM dbo.OTB_SYS_Members ";
  419. break;
  420. case DropDownListType.JobClass://工作類別列表 Add by Alina,人員處需要該部分 2015/7/29.
  421. strSQL = " SELECT ArgumentID,ArgumentValue FROM dbo.OTB_SYS_Arguments WHERE Effective='Y' AND DelStatus='N' AND ArgumentClassID='JobClass' ";
  422. break;
  423. case DropDownListType.TableDirectory://資料表列表 Add by Gary 20141013
  424. strSQL = " select distinct form_id as Table_NameC,form_id as Table_NameE from OTB_SYS_TableDirectory order by form_id ";
  425. break;
  426. }
  427. return strSQL;
  428. }
  429. #endregion
  430. #region Definition Public Methods
  431. #endregion
  432. }
  433. #region 枚舉類型
  434. /// <summary>
  435. /// 是否顯示未選擇
  436. /// </summary>
  437. public enum BindType
  438. {
  439. /// <summary>
  440. /// 否
  441. /// </summary>
  442. No,
  443. /// <summary>
  444. /// 是
  445. /// </summary>
  446. Yes
  447. }
  448. /// <summary>
  449. /// 下拉框類別枚舉
  450. /// </summary>
  451. public enum DropDownListType
  452. {
  453. #region 枚舉類型
  454. /// <summary>
  455. /// 0、預設
  456. /// </summary>
  457. None = 0,
  458. /// <summary>
  459. /// 參數類別有效列表
  460. /// </summary>
  461. ArgumentClassList,
  462. /// <summary>
  463. /// 參數類別全部列表
  464. /// </summary>
  465. ArgumentClassListAll,
  466. /// <summary>
  467. /// 角色信息有效列表
  468. /// </summary>
  469. RoleList,
  470. /// <summary>
  471. /// 模組維護信息列表
  472. /// </summary>
  473. ModuleList,
  474. ///<summary>
  475. ///部門列表
  476. ///</summary>
  477. Department,
  478. /// <summary>
  479. /// 部門信息列表
  480. /// </summary>
  481. DeptIDList,
  482. /// <summary>
  483. /// 職稱信息列表
  484. /// </summary>
  485. JobtitleList,
  486. ///<summary>
  487. ///主管代號 //Add By Jack 2014/07/21
  488. ///</summary>
  489. ChiefID,
  490. ///<summary>
  491. ///人員信息列表
  492. ///</summary>
  493. MemberList,
  494. /// <summary>
  495. /// 工作類別
  496. /// </summary>
  497. JobClass,
  498. /// <summary>
  499. /// 資料表列表
  500. /// </summary>
  501. TableDirectory,
  502. #endregion
  503. }
  504. /// <summary>
  505. /// 是否顯示代號,當查詢到BSYSDATA里的數據時用此屬性
  506. /// </summary>
  507. public enum TextType
  508. {
  509. /// <summary>
  510. /// 是顯示
  511. /// </summary>
  512. Yes,
  513. /// <summary>
  514. /// 否不顯示
  515. /// </summary>
  516. No
  517. }
  518. #endregion
  519. }