private void lvwColumnSorter_CompareItems(object sender, ListViewColumnSorterCompareEventArgs e) { var comparer = listViewResults.Columns[e.Column].Tag as IComparer<SearchFileInfo>; if (comparer == null) return; e.CompareResult = comparer.Compare((SearchFileInfo)e.ItemX.Tag, (SearchFileInfo)e.ItemY.Tag); }
/// <summary> /// This method is inherited from the IComparer interface. It compares the two objects passed using a case insensitive comparison. /// </summary> /// <param name="x">First object to be compared</param> /// <param name="y">Second object to be compared</param> /// <returns>The result of the comparison. "0" if equal, negative if 'x' is less than 'y' and positive if 'x' is greater than 'y'</returns> public int Compare(object x, object y) { int compareResult; ListViewItem listviewX, listviewY; // Cast the objects to be compared to ListViewItem objects listviewX = (ListViewItem)x; listviewY = (ListViewItem)y; // Compare the two items if (CompareItems == null) { compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text); } else { ListViewColumnSorterCompareEventArgs e = new ListViewColumnSorterCompareEventArgs(); e.ItemX = listviewX; e.ItemY = listviewY; e.Column = ColumnToSort; CompareItems(this, e); compareResult = e.CompareResult; } // Calculate correct return value based on object comparison if (OrderOfSort == SortOrder.Ascending) { // Ascending sort is selected, return normal result of compare operation return compareResult; } else if (OrderOfSort == SortOrder.Descending) { // Descending sort is selected, return negative result of compare operation return (-compareResult); } else { // Return '0' to indicate they are equal return 0; } }
private void lvwColumnSorter_CompareItems(object sender, ListViewColumnSorterCompareEventArgs e) { if (e.Column != 2) { e.CompareResult = string.Compare(e.ItemX.SubItems[e.Column].Text, e.ItemY.SubItems[e.Column].Text, true); } else { SearchFileInfo infoX = (SearchFileInfo)e.ItemX.Tag; SearchFileInfo infoY = (SearchFileInfo)e.ItemY.Tag; e.CompareResult = DateTime.Compare(infoX.LastWriteTime, infoY.LastWriteTime); } }