Back to Devexpress

AxisBase.QualitativeScaleComparer Property

corelibraries-devexpress-dot-xtracharts-dot-axisbase-b24f9fd2.md

latest10.4 KB
Original Source

AxisBase.QualitativeScaleComparer Property

Gets or sets the Comparer class object used to compare deferred-axis qualitative scale values.

Namespace : DevExpress.XtraCharts

Assembly : DevExpress.XtraCharts.v25.2.dll

NuGet Package : DevExpress.Charts

Declaration

csharp
[Browsable(false)]
public IComparer QualitativeScaleComparer { get; set; }
vb
<Browsable(False)>
Public Property QualitativeScaleComparer As IComparer

Property Value

TypeDescription
IComparer

An object of the class that implements the IComparer interface.

|

Remarks

How to implement a custom sort order

To implement a custom sort order for qualitative scale values, assign the AxisBase.QualitativeScaleComparer property to an object of a class that implements the IComparer interface.

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;
        }
    }
}
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
csharp
private void OnLoad(object sender, EventArgs e) {
    XYDiagram diagram = chart.Diagram as XYDiagram;
    if (diagram == null) return;
    diagram.AxisX.QualitativeScaleComparer = new NumberComparer();
}
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

How to sort multiple series with different point arguments

This example shows how to use the CaseInsensitiveComparer class to sort multiple series with different point arguments.

csharp
private void Form1_Load(System.Object sender, System.EventArgs e){
  chartNewCusts.SeriesTemplate.ValueScaleType = ScaleType.Numerical;
  chartNewCusts.SeriesTemplate.LegendTextPattern = "{V:n}";
  chartNewCusts.SeriesTemplate.CrosshairLabelPattern = "{S} : {V}";
  chartNewCusts.SeriesTemplate.Label.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True;
  chartNewCusts.SeriesTemplate.Label.Shadow.Visible = false;
  chartNewCusts.SeriesTemplate.Label.TextColor = Color.Black;
  chartNewCusts.SeriesTemplate.Label.ResolveOverlappingMode = ResolveOverlappingMode.HideOverlapped;
  chartNewCusts.SeriesTemplate.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;
  chartNewCusts.SeriesTemplate.Label.TextPattern = "{V:n0}";
  chartNewCusts.DataSource = GetSales();
  chartNewCusts.SeriesSorting = SortingMode.Ascending;
  chartNewCusts.SeriesDataMember = "GroupField";
  chartNewCusts.SeriesTemplate.ArgumentDataMember = "MonthYear";
  chartNewCusts.SeriesTemplate.ValueDataMembers.AddRange(new string[] { "NewCustCount" });
  XYDiagram diagram = chartNewCusts.Diagram as XYDiagram;
  if (diagram == null)
      return;
  diagram.AxisX.QualitativeScaleComparer = new CaseInsensitiveComparer();
  try{
    (XYDiagram)chartNewCusts.Diagram.AxisY.Label.TextPattern = "{V:n0}";
    (XYDiagram)chartNewCusts.Diagram.AxisY.Label.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True;
    (XYDiagram)chartNewCusts.Diagram.AxisX.Label.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True;
  }
  catch (Exception ex){
  }
}

private DataTable GetSales(){
  DataTable table = new DataTable("Sample");

  table.Columns.Add("MonthYear", typeof(string));
  table.Columns.Add("GroupField", typeof(string));
  table.Columns.Add("NewCustCount", typeof(int));

  DataRow row;

  row = table.NewRow();
  row("MonthYear") = "01-2015";
  row("GroupField") = "Customer Referral";
  row("NewCustCount") = 1;
  table.Rows.Add(row);

  row = table.NewRow();
  row("MonthYear") = "01-2015";
  row("GroupField") = "Walk-In";
  row("NewCustCount") = 1;
  table.Rows.Add(row);

  //...

  return table;
}
vb
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    chartNewCusts.SeriesTemplate.ValueScaleType = ScaleType.Numerical
    chartNewCusts.SeriesTemplate.LegendTextPattern = "{V:n}"
    chartNewCusts.SeriesTemplate.CrosshairLabelPattern = "{S} : {V}"
    chartNewCusts.SeriesTemplate.Label.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True
    chartNewCusts.SeriesTemplate.Label.Shadow.Visible = False
    chartNewCusts.SeriesTemplate.Label.TextColor = Color.Black
    chartNewCusts.SeriesTemplate.Label.ResolveOverlappingMode = ResolveOverlappingMode.HideOverlapped
    chartNewCusts.SeriesTemplate.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True
    chartNewCusts.SeriesTemplate.Label.TextPattern = "{V:n0}"
    chartNewCusts.DataSource = GetSales()
    chartNewCusts.SeriesSorting = SortingMode.Ascending
    chartNewCusts.SeriesDataMember = "GroupField"
    chartNewCusts.SeriesTemplate.ArgumentDataMember = "MonthYear"
    chartNewCusts.SeriesTemplate.ValueDataMembers.AddRange(New String() {"NewCustCount"})

    Dim diagram As XYDiagram = TryCast(chartNewCusts.Diagram, XYDiagram)
    If diagram Is Nothing Then
        Return
    End If
    diagram.AxisX.QualitativeScaleComparer = New CaseInsensitiveComparer()

    Try
      CType(chartNewCusts.Diagram, XYDiagram).AxisY.Label.TextPattern = "{V:n0}"
      CType(chartNewCusts.Diagram, XYDiagram).AxisY.Label.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True
      CType(chartNewCusts.Diagram, XYDiagram).AxisX.Label.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True
    Catch ex As Exception
    End Try
End Sub

Private Function GetSales() As DataTable
    Dim table As New DataTable("Sample")

    table.Columns.Add("MonthYear", GetType(String))
    table.Columns.Add("GroupField", GetType(String))
    table.Columns.Add("NewCustCount", GetType(Integer))

    Dim row As DataRow = Nothing

    row = table.NewRow()
    row("MonthYear") = "01-2015"
    row("GroupField") = "Customer Referral"
    row("NewCustCount") = 1
    table.Rows.Add(row)

    row = table.NewRow()
    row("MonthYear") = "01-2015"
    row("GroupField") = "Walk-In"
    row("NewCustCount") = 1
    table.Rows.Add(row)

    ' ...
    Return table

End Function

Result:

The following code snippet (auto-collected from DevExpress Examples) contains a reference to the QualitativeScaleComparer property.

Note

The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.

winforms-charts-sort-stacked-bars-by-total-values-with-qualitativescalecomparer/CS/Form1.cs#L51

csharp
AxisX axisX = ((XYDiagram)chartControl1.Diagram).AxisX;
    axisX.QualitativeScaleComparer = new ArgumentByTotalComparer(argTotalDict);
}

winforms-charts-sort-stacked-bars-by-total-values-with-qualitativescalecomparer/VB/Form1.vb#L51

vb
Dim axisX As AxisX = CType(chartControl1.Diagram, XYDiagram).AxisX
    axisX.QualitativeScaleComparer = New ArgumentByTotalComparer(argTotalDict)
End Sub

See Also

AxisBase Class

AxisBase Members

DevExpress.XtraCharts Namespace