/// <summary> /// Cette méthode est héritée de l'interface IComparer. Il compare les deux objets passés en effectuant une comparaison ///qui ne tient pas compte des majuscules et des minuscules. /// <br/>Si le comparateur n'existe pas dans ColumnsComparer, CaseInsensitiveComparer est utilisé. /// </summary> /// <param name="x">Premier objet à comparer</param> /// <param name="x">Deuxième objet à comparer</param> /// <returns>Le résultat de la comparaison. "0" si équivalent, négatif si 'x' est inférieur à 'y' ///et positif si 'x' est supérieur à 'y'</returns> public int Compare(object x, object y) { int compareResult; ListViewItem listviewX, listviewY; // Envoit les objets à comparer aux objets ListViewItem listviewX = (ListViewItem)x; listviewY = (ListViewItem)y; if (listviewX.SubItems.Count < ColumnToSort + 1 || listviewY.SubItems.Count < ColumnToSort + 1) { return(0); } IComparer objectComparer = null; Type comparableType = null; if (ColumnsComparer == null || !ColumnsComparer.TryGetValue(ColumnToSort, out objectComparer)) { if (ColumnsTypeComparer == null || !ColumnsTypeComparer.TryGetValue(ColumnToSort, out comparableType)) { objectComparer = ObjectCompare; } } // Compare les deux éléments if (comparableType != null) { //Conversion du type object valueX = listviewX.SubItems[ColumnToSort].Text; object valueY = listviewY.SubItems[ColumnToSort].Text; if (!edvTools.TryParse(ref valueX, comparableType) || !edvTools.TryParse(ref valueY, comparableType)) { return(0); } compareResult = (valueX as IComparable).CompareTo(valueY); } else { compareResult = objectComparer.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text); } // Calcule la valeur correcte d'après la comparaison d'objets if (OrderOfSort == SortOrder.Ascending) { // Le tri croissant est sélectionné, renvoie des résultats normaux de comparaison return(compareResult); } else if (OrderOfSort == SortOrder.Descending) { // Le tri décroissant est sélectionné, renvoie des résultats négatifs de comparaison return(-compareResult); } else { // Renvoie '0' pour indiquer qu'ils sont égaux return(0); } }
public void Initialize(GqlQueryState gqlQueryState) { provider.Initialize (gqlQueryState); ColumnsComparer<ColumnsComparerKey > columnsComparer = new ColumnsComparer<ColumnsComparerKey> (provider.GetColumnTypes (), dataComparer); recordList = new SortedSet<ColumnsComparerKey> (columnsComparer); }