The best way of sorting listview is with a ListViewItemComparer. Create yourself a class that implements IComparer. Give it a constructor that takes a column index and a boolean value indicating whether to sort in reverse.
The key method to implement is Compare, which passed two values x and y. These will always be strings in the case of the listview. The simplest way to compare them is therefore a string compare, in which case you can just return String.Compare((string)x, (string) y), obviously negating that if you're sorting in reverse.
If you know which column you are sorting (you should) you can use more advanced comparers, like DateTime.Compare etc.
To apply your sorter to a column, use code like thisin the ColumnClick event:
myListView.ListViewItemSorter = new MySorter(e.Column, false);
myListView.Sort;
It's up to you to record whether the current column is being sorted in reverse order and to adjust the second parameter accordingly.