ExtendedUltraGrid.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using System.Windows.Forms;
  3. using Infragistics.Win.UltraWinGrid;
  4. namespace Core.Mes.Client.Comm.Control
  5. {
  6. /// <summary>
  7. /// ExtendedUltraGrid
  8. /// 1.支持列标题复选框全选功能
  9. /// </summary>
  10. public class ExtendedUltraGrid : UltraGrid
  11. {
  12. /// <summary>
  13. /// 需要进行选择的列名
  14. /// </summary>
  15. public string SelectAllColumnName{get;set;}
  16. internal bool IsGroupMode
  17. {
  18. get
  19. {
  20. foreach (var row in this.Rows)
  21. {
  22. if (row.IsGroupByRow)
  23. {
  24. return true;
  25. }
  26. }
  27. return false;
  28. }
  29. }
  30. internal CheckState CheckState{ get; set; }
  31. /// <summary>
  32. /// ExtendedUltraGrid
  33. /// </summary>
  34. public ExtendedUltraGrid()
  35. {
  36. this.CreationFilter = new CheckableHeaderCreationFilter(this);
  37. }
  38. /// <summary>
  39. /// 重写 UltraGrid OnCellChange方法
  40. /// 全选时或反选时触发对应CellChange事件
  41. /// </summary>
  42. /// <param name="e"></param>
  43. protected override void OnCellChange(CellEventArgs e)
  44. {
  45. base.OnCellChange(e);
  46. if (e.Cell.Column.Key.Equals(this.SelectAllColumnName))
  47. {
  48. if (!Convert.ToBoolean(e.Cell.Value))
  49. {
  50. if (CheckState == CheckState.Checked) CheckState = CheckState.Unchecked;
  51. }
  52. else
  53. {
  54. if (e.Cell.Row.Band.Columns.Exists(SelectAllColumnName))
  55. {
  56. foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in this.Rows)
  57. {
  58. if (!Convert.ToBoolean(row.Cells[SelectAllColumnName].Value))
  59. {
  60. return;
  61. }
  62. }
  63. CheckState = CheckState.Checked;
  64. }
  65. }
  66. }
  67. }
  68. internal void ChangeCell(Infragistics.Win.UltraWinGrid.UltraGridCell cell)
  69. {
  70. if (cell != null)
  71. {
  72. OnCellChange(new CellEventArgs(cell));
  73. }
  74. }
  75. }
  76. }