Сортировка данных в элементах управления диаграммы
В ходе сортировки порядок точек данных ряда меняется в зависимости от значения точки данных.Можно использовать сортировку по возрастанию, по убыванию или настраиваемую сортировку.
Выполнение сортировки по возрастанию или по убыванию
Для сортировки данных используется метод 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
Основные понятия
Копирование, разбиение и объединение данных