/// <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; } }
/// <summary> /// Constructor /// </summary> /// <param name="compareObject">Comparer object</param> public ColumnHeaderTag(FWCompareObject compareObject) { this.compareObject = compareObject; }