Поделиться через


Сортировка данных

В ходе сортировки порядок точек данных ряда меняется в зависимости от значения точки данных.Можно использовать сортировку по возрастанию, по убыванию или настраиваемую сортировку.

Выполнение сортировки по возрастанию или по убыванию

Для сортировки данных используется метод Sort в объекте Series или DataManipulator.Можно использовать порядок сортировки по возрастанию или по убыванию.

В следующем коде показана сортировка данных ряда с использованием первого значения Y (по умолчанию).

' Sort series in ascending order.
Chart1.Series("MySeries").Sort(PointsSortOrder.Ascending)

' Sort series in descending order.
Chart1.DataManipulator.Sort(PointsSortOrder.Descending, "MySeries")
// Sort series in ascending order.
Chart1.Series["MySeries"].Sort(PointsSortOrder.Ascending);

// Sort series in descending order.
Chart1.DataManipulator.Sort(PointsSortOrder.Descending, "MySeries");

По умолчанию для сортировки точек данных используется первое значение Y точек данных.Однако точки данных можно сортировать по значению X или по другим значениям Y, например Y2.Также можно выполнять сортировку по свойству AxisLabel для каждого значения.

В следующем коде показана сортировка данных ряда с использованием значений точки, отличных от значения по умолчанию.

' Sort series in ascending order by X value.
Chart1.Series("MySeries").Sort(PointsSortOrder.Ascending, "X")

' Sort series in descending order by axis label.
Chart1.DataManipulator.Sort(PointsSortOrder.Descending, "AxisLabel","MySeries")
// Sort series in ascending order by X value.
Chart1.Series["MySeries"].Sort(PointsSortOrder.Ascending, "X");

// Sort series in descending order by axis label.
Chart1.DataManipulator.Sort(PointsSortOrder.Descending, "AxisLabel", "MySeries");

Сортировка нескольких рядов

Для сортировки нескольких выровненных рядов можно использовать метод DataManipulator.Sort, указав список имен рядов с разделителями-запятыми.Этот метод сортирует все точки во всех рядах в зависимости от соответствующих значений в первом указанном ряду.Иными словами, он применяет ко всем рядам списка изменения в порядке точек данных, выполненные в первом ряду.

ПримечаниеПримечание

Если метод DataManipulator.Sort используется для сортировки нескольких рядов, данные во всех рядах должны быть выровнены.В противном случае метод создает исключение.Дополнительные сведения о выравнивании данных см. в разделе Выравнивание данных.

В следующем коде показано, как отсортировать несколько рядов по убыванию.

Chart1.DataManipulator.Sort(PointsSortOrder.Descending, "ProductSales,ProductPrice")
Chart1.DataManipulator.Sort(PointsSortOrder.Descending, "ProductSales,ProductPrice");

Выполнение настраиваемой сортировки

Для определения настраиваемой сортировки используется интерфейс IComparer.Метод Compare этого интерфейса принимает в качестве аргументов два объекта DataPoint.Если первый объект меньше второго, метод должен возвращать отрицательное значение. Если объекты равны, метод должен возвращать нулевое значение, а если первый объект больше второго — положительное значение.

В этом примере показано, как реализовать логику настраиваемой сортировки с помощью интерфейса IComparer.

' Sort series.
Chart1.DataManipulator.Sort(New CustomComparer(), "MySeries")
  
' Custom sorting comparing class.
Public Class CustomComparer Implements IComparer
   ' Compares two data points by their Labels and returns a value indicating
   ' if the first data point is less than, equal to, or greater than the second
   ' data point.
   Public Function Compare(ByVal a As Object, ByVal b As Object) As Integer Implements IComparer.Compare
                Dim pointA As DataPoint = a
                Dim pointB As DataPoint = b
                ' Compares data points' Label property
                If pointA.Label < pointB.Label Then
                  Compare = -1
                ElseIf pointA.label > pointB.Label Then
                  Compare = 1
                Else
                  Compare = 0
                End If
        End Function
End Class
// Sort series.
Chart1.DataManipulator.Sort(new CustomComparer(), "MySeries");
  
// Custom sorting comparing class.
public class CustomComparer : IComparer {
    
    // Compares two data points by their Labels and returns a value indicating
    // if the first data point is less than, equal to, or greater than the second
    // data point.
    public int Compare(object a, object b) {
        DataPoint pointA = a;
        DataPoint pointB = b;
        // Compares data points' Label property
        if ((pointA.Label < pointB.Label)) {
            Compare = -1;
        }
        else if ((pointA.label > pointB.Label)) {
            Compare = 1;
        }
        else {
            Compare = 0;
        }
    }
}

См. также

Справочник

System.Windows.Forms.DataVisualization.Charting

System.Web.UI.DataVisualization.Charting

Основные понятия

Фильтрация данных

Выравнивание данных

Группирование данных

Копирование, разбиение и объединение данных

Другие ресурсы

Привязка и обработка данных