Back to Devexpress

How to: Display Qualitative Scale Values Sorted in a Custom Sort Order

windowsforms-115144-controls-and-libraries-chart-control-examples-creating-charts-data-representation-how-to-display-qualitative-scale-values-sorted-in-a-custom-sort-order.md

latest3.1 KB
Original Source

How to: Display Qualitative Scale Values Sorted in a Custom Sort Order

  • Nov 13, 2018
  • 2 minutes to read

Assign an object of a class that implements the IComparer interface to the AxisBase.QualitativeScaleComparer property.

csharp
using System;
using System.Collections;

namespace QualitativeScaleCustomSortOrderSample {
    class NumberComparer : IComparer {
        public int Compare(object x, object y) {
            int iX = NumberConverter.ToInt(x);
            int iY = NumberConverter.ToInt(y);
            return iX - iY;
        }
    }

    class NumberConverter {
        public static int ToInt(object o) {
            string stringNumber = o as string;
            int number = 0;
            if (stringNumber == null) return -1;
            if (Int32.TryParse(stringNumber, out number))
                return number;
            switch (stringNumber.ToLower()) {
                case "one": return 1;
                case "two": return 2;
                case "three": return 3;
            }
            return number;
        }
    }
}
csharp
private void OnLoad(object sender, EventArgs e) {
    XYDiagram diagram = chart.Diagram as XYDiagram;
    if (diagram == null) return;
    diagram.AxisX.QualitativeScaleComparer = new NumberComparer();
}
vb
Imports System
Imports System.Collections

Namespace QualitativeScaleCustomSortOrderSample
    Friend Class NumberComparer
        Implements IComparer

        Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
            Dim iX As Integer = NumberConverter.ToInt(x)
            Dim iY As Integer = NumberConverter.ToInt(y)
            Return iX - iY
        End Function
    End Class

    Friend Class NumberConverter
        Public Shared Function ToInt(ByVal o As Object) As Integer
            Dim stringNumber As String = TryCast(o, String)
            Dim number As Integer = 0
            If stringNumber Is Nothing Then
                Return -1
            End If
            If Int32.TryParse(stringNumber, number) Then
                Return number
            End If
            Select Case stringNumber.ToLower()
                Case "one"
                    Return 1
                Case "two"
                    Return 2
                Case "three"
                    Return 3
            End Select
            Return number
        End Function
    End Class
End Namespace
vb
Private Overloads Sub OnLoad(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    Dim diagram As XYDiagram = TryCast(chart.Diagram, XYDiagram)
    If diagram Is Nothing Then
        Return
    End If
    diagram.AxisX.QualitativeScaleComparer = New NumberComparer()
End Sub