Back to Devexpress

ISeriesTemplateAdapter Interface

corelibraries-devexpress-dot-xtracharts-d0b5fde4.md

latest8.7 KB
Original Source

ISeriesTemplateAdapter Interface

Should be implemented by any class that can be used as a data adapter that creates series based on a template.

Namespace : DevExpress.XtraCharts

Assembly : DevExpress.XtraCharts.v25.2.dll

NuGet Package : DevExpress.Charts

Declaration

csharp
public interface ISeriesTemplateAdapter :
    IChartDataAdapter,
    ICloneable
vb
Public Interface ISeriesTemplateAdapter
    Inherits IChartDataAdapter,
             ICloneable

The following members return ISeriesTemplateAdapter objects:

Remarks

The following example shows how to implement a series template adapter. This adapter is used to create two series with numeric arguments and values:

csharp
using DevExpress.XtraCharts;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace CustomDataAdapter {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e) {
            List<DataItem> dataItems = new List<DataItem>() {
                new DataItem(1,1,"I"),
                new DataItem(2,2,"I"),
                new DataItem(3,3,"I"),
                new DataItem(4,4,"I"),
                new DataItem(5,5,"I"),
                new DataItem(1,5,"II"),
                new DataItem(2,4,"II"),
                new DataItem(3,3,"II"),
                new DataItem(4,2,"II"),
                new DataItem(5,1,"II")
            };
            chartControl1.SeriesTemplate.DataAdapter = new CustomNumericDataAdapter(dataItems);
            chartControl1.SeriesTemplate.ChangeView(ViewType.StepLine);
        }
    }
    public class DataItem {
        public double Argument { get; }
        public double Value { get; }
        public string Category { get; }
        public DataItem(double argument, double value, string category) {
            Argument = argument;
            Value = value;
            Category = category;
        }
    }
    public class CustomNumericDataAdapter : ISeriesTemplateAdapter {
        readonly IList<DataItem> items;
        public bool DataSorted => true;
        public int ItemsCount => this.items.Count;
        public CustomNumericDataAdapter(IList<DataItem> items) {
            this.items = items;
        }
        event NotifyChartDataChangedEventHandler IChartDataAdapter.DataChanged {
            add { }
            remove { }
        }
        public object Clone() {
            return this;
        }
        public double GetNumericalValue(int index, ChartDataMemberType dataMember) {
            switch (dataMember) {
                case ChartDataMemberType.Argument: return items[index].Argument;
                case ChartDataMemberType.Value: return items[index].Value;
            }
            return double.NaN;
        }
        public object GetSourceObject(int index) {
            return this.items[index];
        }
        public ActualScaleType GetScaleType(ChartDataMemberType dataMember) {
            return ActualScaleType.Numerical;
        }
        public object GetObjectValue(int index, ChartDataMemberType dataMember) {
            return dataMember is ChartDataMemberType.Series ? items[index].Category : string.Empty;
        }
        public DateTime GetDateTimeValue(int index, ChartDataMemberType dataMember) {
            throw new NotImplementedException();
        }
        public string GetQualitativeValue(int index, ChartDataMemberType dataMember) {
            throw new NotImplementedException();
        }
        public TimeSpan GetTimeSpanValue(int index, ChartDataMemberType dataMember) {
            throw new NotImplementedException();
        }
    }
}
vb
Imports DevExpress.XtraCharts
Imports System
Imports System.Collections.Generic
Imports System.Windows.Forms

Namespace CustomDataAdapter
    Public Partial Class Form1
        Inherits Form

        Public Sub New()
            Me.InitializeComponent()
        End Sub

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
            Dim dataItems As List(Of DataItem) = New List(Of DataItem)() From {
                New DataItem(1, 1, "I"),
                New DataItem(2, 2, "I"),
                New DataItem(3, 3, "I"),
                New DataItem(4, 4, "I"),
                New DataItem(5, 5, "I"),
                New DataItem(1, 5, "II"),
                New DataItem(2, 4, "II"),
                New DataItem(3, 3, "II"),
                New DataItem(4, 2, "II"),
                New DataItem(5, 1, "II")
            }
            Me.chartControl1.SeriesTemplate.DataAdapter = New CustomNumericDataAdapter(dataItems)
            Me.chartControl1.SeriesTemplate.ChangeView(ViewType.StepLine)
        End Sub
    End Class

    Public Class DataItem
        Public ReadOnly Property Argument As Double
        Public ReadOnly Property Value As Double
        Public ReadOnly Property Category As String

        Public Sub New(ByVal argument As Double, ByVal value As Double, ByVal category As String)
            Me.Argument = argument
            Me.Value = value
            Me.Category = category
        End Sub
    End Class

    Public Class CustomNumericDataAdapter
        Implements ISeriesTemplateAdapter

        Private ReadOnly items As IList(Of DataItem)

        Public ReadOnly Property DataSorted As Boolean Implements IChartDataAdapter.DataSorted
            Get
                Return True
            End Get
        End Property

        Public ReadOnly Property ItemsCount As Integer Implements IChartDataAdapter.ItemsCount
            Get
                Return items.Count
            End Get
        End Property

        Public Sub New(ByVal items As IList(Of DataItem))
            Me.items = items
        End Sub

        Private Custom Event DataChanged As NotifyChartDataChangedEventHandler Implements IChartDataAdapter.DataChanged
            AddHandler(ByVal value As NotifyChartDataChangedEventHandler)
            End AddHandler
            RemoveHandler(ByVal value As NotifyChartDataChangedEventHandler)
            End RemoveHandler
            RaiseEvent(ByVal sender As Object, ByVal e As ChartDataUpdateEventArgs)
            End RaiseEvent
        End Event

        Public Function Clone() As Object Implements ICloneable.Clone
            Return Me
        End Function

        Public Function GetNumericalValue(ByVal index As Integer, ByVal dataMember As ChartDataMemberType) As Double Implements IChartDataAdapter.GetNumericalValue
            Select Case dataMember
                Case ChartDataMemberType.Argument
                    Return items(index).Argument
                Case ChartDataMemberType.Value
                    Return items(index).Value
            End Select

            Return Double.NaN
        End Function

        Public Function GetSourceObject(ByVal index As Integer) As Object Implements IChartDataAdapter.GetSourceObject
            Return items(index)
        End Function

        Public Function GetScaleType(ByVal dataMember As ChartDataMemberType) As ActualScaleType Implements IChartDataAdapter.GetScaleType
            Return ActualScaleType.Numerical
        End Function

        Public Function GetObjectValue(ByVal index As Integer, ByVal dataMember As ChartDataMemberType) As Object Implements IChartDataAdapter.GetObjectValue
            Return If(TypeOf dataMember Is ChartDataMemberType.Series, items(index).Category, String.Empty)
        End Function

        Public Function GetDateTimeValue(ByVal index As Integer, ByVal dataMember As ChartDataMemberType) As Date Implements IChartDataAdapter.GetDateTimeValue
            Throw New NotImplementedException()
        End Function

        Public Function GetQualitativeValue(ByVal index As Integer, ByVal dataMember As ChartDataMemberType) As String Implements IChartDataAdapter.GetQualitativeValue
            Throw New NotImplementedException()
        End Function

        Public Function GetTimeSpanValue(ByVal index As Integer, ByVal dataMember As ChartDataMemberType) As TimeSpan Implements IChartDataAdapter.GetTimeSpanValue
            Throw New NotImplementedException()
        End Function
    End Class
End Namespace

See Also

ISeriesTemplateAdapter Members

DevExpress.XtraCharts Namespace