ListViewColumnSorter.cs 1.5 KB

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