corelibraries-devexpress-dot-xtracharts-dot-axisbase-b24f9fd2.md
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
[Browsable(false)]
public IComparer QualitativeScaleComparer { get; set; }
<Browsable(False)>
Public Property QualitativeScaleComparer As IComparer
| Type | Description |
|---|---|
| IComparer |
An object of the class that implements the IComparer interface.
|
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.
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;
}
}
}
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
private void OnLoad(object sender, EventArgs e) {
XYDiagram diagram = chart.Diagram as XYDiagram;
if (diagram == null) return;
diagram.AxisX.QualitativeScaleComparer = new NumberComparer();
}
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
This example shows how to use the CaseInsensitiveComparer class to sort multiple series with different point arguments.
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;
}
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
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
Dim axisX As AxisX = CType(chartControl1.Diagram, XYDiagram).AxisX
axisX.QualitativeScaleComparer = New ArgumentByTotalComparer(argTotalDict)
End Sub
See Also