All docs
V21.2
21.2
21.1
20.2
The page you are viewing does not exist in version 20.2. This link will take you to the root page.
20.1
The page you are viewing does not exist in version 20.1. This link will take you to the root page.
19.2
The page you are viewing does not exist in version 19.2. This link will take you to the root page.
19.1
The page you are viewing does not exist in version 19.1. This link will take you to the root page.
18.2
The page you are viewing does not exist in version 18.2. This link will take you to the root page.
18.1
The page you are viewing does not exist in version 18.1. This link will take you to the root page.
17.2
The page you are viewing does not exist in version 17.2. This link will take you to the root page.

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.v21.2.dll

Declaration

public interface ISeriesTemplateAdapter :
    IChartDataAdapter,
    ICloneable

The following members accept/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:

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();
        }
    }
}
See Also