void listView1_ColumnClick(object sender, ColumnClickEventArgs e) { // Determine if clicked column is already the column that is being sorted. if (e.Column == lvwColumnSorter.SortColumn) { // Reverse the current sort direction for this column. if (lvwColumnSorter.Order == SortOrder.Ascending) { lvwColumnSorter.Order = SortOrder.Descending; ListViewExtensions.SetSortIcon(listView1, e.Column, SortOrder.Descending); } else { lvwColumnSorter.Order = SortOrder.Ascending; ListViewExtensions.SetSortIcon(listView1, e.Column, SortOrder.Ascending); } } else { // Set the column number that is to be sorted; default to ascending. lvwColumnSorter.SortColumn = e.Column; lvwColumnSorter.Order = SortOrder.Ascending; ListViewExtensions.SetSortIcon(listView1, e.Column, SortOrder.Ascending); } // Perform the sort with these new sort options. this.listView1.Sort(); }
/// <summary> /// Sorts the list by the clicked column. /// </summary> /// <param name="e">EventArgs object</param> protected override void OnColumnClick(ColumnClickEventArgs e) { //locked = true; base.OnColumnClick(e); //using (new Hourglass(ShowHourglass)) { ColumnHeader columnHeader = this.Columns[e.Column]; // The comparer is stored in the Tag property FWCompareObject comparer = ((ColumnHeaderTag)columnHeader.Tag).compareObject; if (compareObjectComparersVal.FirstComparer == comparer) { comparer.Ascending ^= true; } else { compareObjectComparersVal.FirstComparer = comparer; } object focusedObjectCache = FocusedObject; List <int> selectedObjectIDs = new List <int>(); BeforeSort(selectedObjectIDs); // Sort the cached objects. // The cache will ensure, that all objects are read. objectsCacheValue.Sort(compareObjectComparersVal); List <int> selectedIndizes = new List <int>(); AfterSort(focusedObjectCache, selectedObjectIDs, selectedIndizes); // The current cache for ListViewItems is invalid now itemCache = null; // Redraw the list Refresh(); // Set the sort icon (triangle in the column header) SortOrder sortOrder = comparer.Ascending ? SortOrder.Ascending : SortOrder.Descending; ListViewExtensions.SetSortIcon(this, e.Column, sortOrder); //locked = false; } }