SearchLookUpEditExtension.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using DevExpress.XtraEditors;
  2. using DevExpress.XtraGrid.Columns;
  3. using DevExpress.XtraGrid.Views.Grid;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.ComponentModel;
  7. using System.ComponentModel.DataAnnotations;
  8. using System.Drawing;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Reflection;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace ExtensionsDev
  15. {
  16. public static class SearchLookUpEditExtension
  17. {
  18. /// <summary>
  19. /// 设置SearchLookUpEdit默认属性
  20. /// </summary>
  21. /// <param name="ctrl"></param>
  22. /// <param name="data">数据源</param>
  23. public static SearchLookUpEdit UseDefault(this SearchLookUpEdit ctrl, string nullText = "请选择", bool showClearBtn = false)
  24. {
  25. ctrl.Properties.NullText = null;
  26. ctrl.Properties.NullValuePrompt = nullText;
  27. ctrl.Properties.AllowFocused = false;
  28. ctrl.Properties.ShowNullValuePrompt = ShowNullValuePromptOptions.Default;
  29. ctrl.Properties.ShowAddNewButton = false;
  30. ctrl.Properties.ShowClearButton = showClearBtn;
  31. ctrl.Properties.ShowFooter = false;
  32. ctrl.Properties.ShowPopupShadow = true;
  33. return ctrl;
  34. }
  35. /// <summary>
  36. /// 绑定SearchLookUpEdit数据源
  37. /// </summary>
  38. /// <param name="ctrl"></param>
  39. /// <param name="data">数据源</param>
  40. public static SearchLookUpEdit SetStringData(this SearchLookUpEdit ctrl, IEnumerable<string> data)
  41. {
  42. ctrl.Properties.DataSource = data;
  43. GridView view = ctrl.Properties.View;
  44. view.OptionsView.ShowColumnHeaders = false;
  45. view.GridControl.Init();
  46. return ctrl;
  47. }
  48. /// <summary>
  49. /// 绑定SearchLookUpEdit数据源
  50. /// </summary>
  51. /// <param name="ctrl"></param>
  52. /// <param name="data">数据源</param>
  53. public static SearchLookUpEdit SetData<T>(this SearchLookUpEdit ctrl, IEnumerable<T> data)
  54. {
  55. ctrl.QueryPopUp += Ctrl_QueryPopUp;
  56. ctrl.Properties.DataSource = data;
  57. GridView view = ctrl.Properties.View;
  58. view.OptionsView.ShowColumnHeaders = true;
  59. view.GridControl.Init();
  60. return ctrl;
  61. }
  62. private static void Ctrl_QueryPopUp(object sender, System.ComponentModel.CancelEventArgs e)
  63. {
  64. var ctrl = sender as SearchLookUpEdit;
  65. var view = ctrl.Properties.View;
  66. var dataType = view.DataSource.GetType().GetGenericArguments().Single();
  67. var props = dataType.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
  68. foreach (GridColumn column in view.Columns)
  69. {
  70. var prop = props.First(p => p.Name == column.FieldName);
  71. var attrDisplay = prop.GetCustomAttribute<DisplayAttribute>();
  72. var attrDisplayName = prop.GetCustomAttribute<DisplayNameAttribute>();
  73. if (attrDisplay == null && attrDisplayName == null)
  74. column.Visible = false;
  75. else if (attrDisplay != null && attrDisplay.AutoGenerateField == false)
  76. column.Visible = false;
  77. else
  78. column.Visible = true;
  79. }
  80. }
  81. }
  82. }