SearchBoxForm.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. 
  2. using System;
  3. using System.Data;
  4. using System.Windows.Forms;
  5. using Dongke.WinForm.Controls;
  6. using Dongke.WinForm.Utilities;
  7. namespace Dongke.IBOSS.PRD.Client.Controls.SearchBox
  8. {
  9. /// <summary>
  10. /// 查询窗体
  11. /// </summary>
  12. public partial class SearchBoxForm : FormDialog, ISearchBoxForm
  13. {
  14. #region 成员变量
  15. /// <summary>
  16. /// 指示是否能够多项选择。
  17. /// </summary>
  18. private bool _multiSelect = false;
  19. /// <summary>
  20. /// 查询的范围权限类型
  21. /// </summary>
  22. private PurviewType _purviewType = PurviewType.None;
  23. /// <summary>
  24. /// 选定的数据
  25. /// </summary>
  26. private DataTable _checkedData = null;
  27. /// <summary>
  28. /// 查询结果的主键
  29. /// </summary>
  30. private string _pk = null;
  31. /// <summary>
  32. /// 扩展属性
  33. /// </summary>
  34. private ExtendedProperties _properties = null;
  35. #endregion
  36. #region 构造函数
  37. /// <summary>
  38. /// 查询窗体
  39. /// </summary>
  40. protected SearchBoxForm()
  41. {
  42. InitializeComponent();
  43. if (!this.DesignMode)
  44. {
  45. this.ResetFormLayout();
  46. }
  47. }
  48. #endregion
  49. #region 属性
  50. /// <summary>
  51. /// 获取或设置查询结果的主键。
  52. /// </summary>
  53. public string PKMember
  54. {
  55. get
  56. {
  57. return this._pk;
  58. }
  59. set
  60. {
  61. if (this._pk != value)
  62. {
  63. if (this._checkedData != null && !string.IsNullOrEmpty(value))
  64. {
  65. if (this._checkedData.Columns.Contains(value))
  66. {
  67. this._checkedData.PrimaryKey = new DataColumn[] { this._checkedData.Columns[value] };
  68. }
  69. else
  70. {
  71. return;
  72. }
  73. }
  74. this._pk = value;
  75. }
  76. }
  77. }
  78. /// <summary>
  79. /// 获取或设置一个值,该值指示是否能够多项选择。
  80. /// </summary>
  81. public bool MultiSelect
  82. {
  83. get
  84. {
  85. return this._multiSelect;
  86. }
  87. set
  88. {
  89. if (this._multiSelect != value)
  90. {
  91. this._multiSelect = value;
  92. this.ResetFormLayout();
  93. }
  94. }
  95. }
  96. /// <summary>
  97. /// 获取或设置限制查询的范围权限类型。
  98. /// </summary>
  99. public PurviewType PurviewType
  100. {
  101. get
  102. {
  103. return this._purviewType;
  104. }
  105. set
  106. {
  107. if (this._purviewType != value)
  108. {
  109. this._purviewType = value;
  110. }
  111. }
  112. }
  113. /// <summary>
  114. /// 获取选定的数据项。
  115. /// </summary>
  116. public DataTable CheckedData
  117. {
  118. get
  119. {
  120. return this._checkedData;
  121. }
  122. }
  123. /// <summary>
  124. /// 获取或设置其他自定义属性。
  125. /// </summary>
  126. public ExtendedProperties Properties
  127. {
  128. get
  129. {
  130. if (this._properties == null)
  131. {
  132. this._properties = new ExtendedProperties();
  133. }
  134. return this._properties;
  135. }
  136. set
  137. {
  138. this._properties = value;
  139. }
  140. }
  141. /// <summary>
  142. /// 获取其他自定义属性个数。
  143. /// </summary>
  144. public int PropertieCount
  145. {
  146. get
  147. {
  148. if (this._properties == null)
  149. {
  150. return 0;
  151. }
  152. return this._properties.Count;
  153. }
  154. }
  155. #endregion
  156. #region 公有方法
  157. /// <summary>
  158. /// 窗体中数据保存后,需要继续操作,并初始化窗体时调用。
  159. /// </summary>
  160. public override void RefreshData()
  161. {
  162. base.RefreshData();
  163. this.dgvChecked.DataSource = null;
  164. }
  165. /// <summary>
  166. /// 点击查询按钮时调用。
  167. /// </summary>
  168. /// <returns>操作结果</returns>
  169. public override bool QueryData()
  170. {
  171. bool result = base.QueryData();
  172. DataTable data = this.dgvSelected.DataSource as DataTable;
  173. if (data != null && !string.IsNullOrEmpty(this._pk))
  174. {
  175. data.PrimaryKey = new DataColumn[] { data.Columns[this._pk] };
  176. }
  177. if (this._multiSelect && !data.Columns.Contains("SEL"))
  178. {
  179. DataColumn col = new DataColumn("SEL", typeof(int));
  180. col.DefaultValue = 0;
  181. data.Columns.Add(col);
  182. data.AcceptChanges();
  183. }
  184. if (this.dgvSelected.RowCount > 0)
  185. {
  186. this.dgvSelected.Rows[0].Selected = true;
  187. }
  188. this.dgvSelected.IsSetInputColumnsColor = true;
  189. return result;
  190. }
  191. /// <summary>
  192. /// 设置查询条件
  193. /// </summary>
  194. public virtual void SetConditions(params object[] values)
  195. {
  196. if (values.Length > 0)
  197. {
  198. //this.txtCondition1.Text = values[0].ToString();
  199. }
  200. }
  201. /// <summary>
  202. /// 清除查询条件
  203. /// </summary>
  204. public override void ClearConditions()
  205. {
  206. //this.txtCondition1.Clear();
  207. }
  208. /// <summary>
  209. /// 清除查询结果
  210. /// </summary>
  211. public override void ClearQueryResults()
  212. {
  213. this.dgvSelected.DataSource = null;
  214. }
  215. /// <summary>
  216. /// 根据多选、单选设定窗体显示样式
  217. /// </summary>
  218. public virtual void ResetFormLayout()
  219. {
  220. if (this._multiSelect)
  221. {
  222. // 多选
  223. this.dgvChecked.Visible = true;
  224. this.colChk.Visible = true;
  225. this.dgvSelected.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect;
  226. this.colSel.Visible = true;
  227. this.dgvSelected.ReadOnly = false;
  228. this.splSplitContainer.Panel2Collapsed = false;
  229. this.splSplitContainer.IsSplitterFixed = false;
  230. }
  231. else
  232. {
  233. // 单选
  234. this.dgvChecked.Visible = false;
  235. this.colChk.Visible = false;
  236. this.dgvSelected.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
  237. this.colSel.Visible = false;
  238. this.dgvSelected.ReadOnly = true;
  239. this.splSplitContainer.Panel2Collapsed = true;
  240. this.splSplitContainer.IsSplitterFixed = true;
  241. }
  242. }
  243. #endregion
  244. #region 保护方法
  245. /// <summary>
  246. /// 窗体加载前调用(设置Form.Text、按钮等控件Text等)。
  247. /// </summary>
  248. protected override void InitForm()
  249. {
  250. this.tsbtnAdaptive.Text = Dongke.IBOSS.PRD.Basics.BaseResources.Constant.TSBTN_ADAPTIVE;
  251. this.tsbtnSearch.Text = Dongke.IBOSS.PRD.Basics.BaseResources.Constant.BTN_SEARCH;
  252. this.tsbtnClearCondition.Text = Dongke.IBOSS.PRD.Basics.BaseResources.Constant.BTN_CLEARCONDITION;
  253. this.btnOK.Text = Dongke.IBOSS.PRD.Basics.BaseResources.Constant.BTN_SUBMIT;
  254. this.btnCancel.Text = Dongke.IBOSS.PRD.Basics.BaseResources.Constant.BTN_CANCEL;
  255. this.btnCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
  256. this.btnOK.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
  257. this.dgvChecked.AutoGenerateColumns = false;
  258. this.dgvSelected.AutoGenerateColumns = false;
  259. // 不显示选过的
  260. foreach (DataGridViewColumn item in this.dgvSelected.Columns)
  261. {
  262. if (item.Name == "colSel")
  263. {
  264. continue;
  265. }
  266. DataGridViewColumn col = (DataGridViewColumn)item.Clone();
  267. col.Name = "c" + col.Name;
  268. this.dgvChecked.Columns.Add(col);
  269. }
  270. }
  271. /// <summary>
  272. /// 窗体加载时调用(获取窗体初始化数据等)。
  273. /// </summary>
  274. protected override bool LoadForm()
  275. {
  276. //if (this._multiSelect)
  277. //{
  278. // if (this._checkedData != null && this._checkedData.Rows.Count > 0)
  279. // {
  280. // this.dgvChecked.DataSource = this._checkedData;
  281. // this.colChk.HeaderCellEx.CheckedAllState = CheckState.Checked;
  282. // }
  283. //}
  284. return true;
  285. }
  286. /// <summary>
  287. /// 验证窗体中数据是否改变。
  288. /// </summary>
  289. /// <returns>数据被更改true,其他false</returns>
  290. protected override bool CheckDirty()
  291. {
  292. return false;
  293. }
  294. /// <summary>
  295. /// 验证画面输入项目
  296. /// </summary>
  297. /// <returns>验证通过true,其他false</returns>
  298. protected override bool CheckInputData()
  299. {
  300. return true;
  301. }
  302. /// <summary>
  303. /// 保存或设置数据到其他位置(其他画面或DB)
  304. /// </summary>
  305. /// <returns>保存或设置成功true,其他false</returns>
  306. protected override bool SetDataToOther()
  307. {
  308. this._checkedData = null;
  309. if (this._multiSelect)
  310. {
  311. //this.dgvSelected.EndEdit();
  312. DataTable data = this.dgvSelected.DataSource as DataTable;
  313. if (data != null)
  314. {
  315. data.DefaultView.Sort = "";
  316. data.DefaultView.RowFilter = colSel.DataPropertyName + " = 1";
  317. this._checkedData = data.DefaultView.ToTable();
  318. this._checkedData.PrimaryKey = new DataColumn[] { this._checkedData.Columns[this._pk] };
  319. }
  320. //this.dgvChecked.EndEdit();
  321. data = this.dgvChecked.DataSource as DataTable;
  322. if (data != null)
  323. {
  324. data.DefaultView.Sort = "";
  325. data.DefaultView.RowFilter = this.colChk.DataPropertyName + " = 1";
  326. if (this._checkedData == null)
  327. {
  328. this._checkedData = data.DefaultView.ToTable();
  329. this._checkedData.PrimaryKey = new DataColumn[] { this._checkedData.Columns[this._pk] };
  330. }
  331. else
  332. {
  333. this._checkedData.Merge(data.DefaultView.ToTable());
  334. }
  335. }
  336. //this.dgvSelected.DataSource = null;
  337. //this.dgvChecked.DataSource = null;
  338. }
  339. else
  340. {
  341. if (this.dgvSelected.SelectedRows != null && this.dgvSelected.SelectedRows.Count > 0)
  342. {
  343. DataTable data = this.dgvSelected.DataSource as DataTable;
  344. DataRowView rowView = this.dgvSelected.SelectedRows[0].DataBoundItem as DataRowView;
  345. if (data != null && rowView != null)
  346. {
  347. this._checkedData = data.Clone();
  348. this._checkedData.ImportRow(rowView.Row);
  349. }
  350. }
  351. }
  352. return true;
  353. }
  354. /// <summary>
  355. /// 保存或设置数据成功后提示消息
  356. /// </summary>
  357. protected override void ShowMessageOnSetSucceed()
  358. {
  359. }
  360. /// <summary>
  361. /// 保存或设置数据成功后提示消息(新建或复制时,询问是否继续操作)
  362. /// </summary>
  363. /// <returns>继续操作true,其他false</returns>
  364. protected override bool ShowMessageOnAddSucceed()
  365. {
  366. return false;
  367. }
  368. /// <summary>
  369. /// 验证查询条件。
  370. /// </summary>
  371. /// <returns>验证通过true,其他false</returns>
  372. protected override bool CheckQueryConditions()
  373. {
  374. return true;
  375. }
  376. /// <summary>
  377. /// 查询数据。
  378. /// </summary>
  379. /// <returns>验证通过true,其他false</returns>
  380. protected override bool QueryDataFromOther()
  381. {
  382. return true;
  383. }
  384. #endregion
  385. #region 事件处理
  386. /// <summary>
  387. /// 自适应列宽
  388. /// </summary>
  389. /// <param name="sender"></param>
  390. /// <param name="e"></param>
  391. private void tsbtnAdaptive_Click(object sender, EventArgs e)
  392. {
  393. this.dgvSelected.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
  394. this.dgvChecked.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
  395. }
  396. /// <summary>
  397. /// 点击查询按钮
  398. /// </summary>
  399. /// <param name="sender"></param>
  400. /// <param name="e"></param>
  401. private void btnQuery_Click(object sender, System.EventArgs e)
  402. {
  403. try
  404. {
  405. this.QueryData();
  406. }
  407. catch
  408. {
  409. }
  410. }
  411. /// <summary>
  412. /// 点击清除按钮
  413. /// </summary>
  414. /// <param name="sender"></param>
  415. /// <param name="e"></param>
  416. private void btnClear_Click(object sender, System.EventArgs e)
  417. {
  418. try
  419. {
  420. this.ClearConditions();
  421. }
  422. catch
  423. {
  424. }
  425. }
  426. /// <summary>
  427. /// 点击确定按钮
  428. /// </summary>
  429. /// <param name="sender"></param>
  430. /// <param name="e"></param>
  431. private void btnOK_Click(object sender, System.EventArgs e)
  432. {
  433. try
  434. {
  435. this.SetData();
  436. }
  437. catch
  438. {
  439. }
  440. }
  441. /// <summary>
  442. /// 点击取消按钮
  443. /// </summary>
  444. /// <param name="sender"></param>
  445. /// <param name="e"></param>
  446. private void btnCancel_Click(object sender, System.EventArgs e)
  447. {
  448. this.Close();
  449. }
  450. /// <summary>
  451. /// 双击选择
  452. /// </summary>
  453. /// <param name="sender"></param>
  454. /// <param name="e"></param>
  455. private void dgvSelected_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
  456. {
  457. try
  458. {
  459. if (this._multiSelect || e.ColumnIndex < 0 || e.RowIndex < 0)
  460. {
  461. return;
  462. }
  463. this.SetData();
  464. }
  465. catch
  466. {
  467. }
  468. }
  469. #endregion
  470. private void dgvSelected_Sorted(object sender, EventArgs e)
  471. {
  472. this.dgvSelected.IsSetInputColumnsColor = true;
  473. }
  474. private void dgvChecked_Sorted(object sender, EventArgs e)
  475. {
  476. this.dgvChecked.IsSetInputColumnsColor = true;
  477. }
  478. }
  479. }