ListViewColumnSorter.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Windows.Forms;
  7. using System.Threading.Tasks;
  8. namespace Optimizer
  9. {
  10. internal class ListViewColumnSorter : IComparer
  11. {
  12. int _columnToSort;
  13. SortOrder _sortOrder;
  14. CaseInsensitiveComparer _comparer;
  15. public ListViewColumnSorter()
  16. {
  17. _columnToSort = 0;
  18. _sortOrder = SortOrder.None;
  19. _comparer = new CaseInsensitiveComparer();
  20. }
  21. public int CurrentColumn
  22. {
  23. get { return _columnToSort; }
  24. set { _columnToSort = value; }
  25. }
  26. public SortOrder SortOrder
  27. {
  28. get { return _sortOrder; }
  29. set { _sortOrder = value; }
  30. }
  31. public int Compare(object x, object y)
  32. {
  33. int compareResult;
  34. ListViewItem listViewX = (ListViewItem)x;
  35. ListViewItem listViewY = (ListViewItem)y;
  36. try
  37. {
  38. compareResult = _comparer.Compare(Convert.ToInt64(listViewX.SubItems[_columnToSort].Text), Convert.ToInt64(listViewY.SubItems[_columnToSort].Text));
  39. }
  40. catch
  41. {
  42. compareResult = _comparer.Compare(listViewX.SubItems[_columnToSort].Text, listViewY.SubItems[_columnToSort].Text);
  43. }
  44. if (_sortOrder == SortOrder.Ascending)
  45. {
  46. return compareResult;
  47. }
  48. else if (_sortOrder == SortOrder.Descending)
  49. {
  50. return -compareResult;
  51. }
  52. else
  53. {
  54. return 0;
  55. }
  56. }
  57. }
  58. }