2
0

ListViewColumnSorter.cs 1.6 KB

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