Похоже, вам нужно показывать значение времени из каждой записи источника данных с использованием шкалы TimeSpan. Хотя DevExpress ChartControl не поддерживает тип масштаба TimeSpan, вы можете использовать следующий подход для создания требуемого макета диаграммы.
Сначала определите дополнительное числовое поле, которое будет использоваться в качестве ValueDataMember и будет содержать количество тиков, соответствующее значению TimeSpan.
Чтобы отображать метки TimeSpan вместо числовых значений, заполните коллекцию пользовательских меток оси элементов.
Наконец, настройте текст метки Crosshair Cursor, обработав событие CustomDrawCrosshair .
Пожалуйста, обратитесь к примеру исходного кода, иллюстрирующего этот подход:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
List<MyData> inputData = new List<MyData>();
inputData.Add(new MyData() { ID = 1, ScannedDateTime = new DateTime(2019, 4, 1, 11, 22, 33) });
inputData.Add(new MyData() { ID = 2, ScannedDateTime = new DateTime(2019, 4, 2, 15, 00, 12) });
inputData.Add(new MyData() { ID = 3, ScannedDateTime = new DateTime(2019, 4, 3, 09, 11, 03) });
Series lineSeries = new Series("Scanned Date", ViewType.Line);
lineSeries.ArgumentDataMember = "ScannedDateTime";
lineSeries.ValueScaleType = ScaleType.Numerical;
lineSeries.ValueDataMembers.AddRange(new string[] { "TimeTicks" });
lineSeries.DataSource = inputData;
chartControl1.Series.Add(lineSeries);
XYDiagram diagram = (XYDiagram)chartControl1.Diagram;
diagram.AxisX.DateTimeScaleOptions.MeasureUnit = DateTimeMeasureUnit.Day;
for (int i = 0; i < 24; i++)
{
TimeSpan ts = new TimeSpan(i, 0, 0); //display tickmarks for every hour
diagram.AxisY.CustomLabels.Add(new CustomAxisLabel() { AxisValue = ts.Ticks, Name = ts.ToString() });
}
chartControl1.CustomDrawCrosshair += ChartControl1_CustomDrawCrosshair; // optional - if you need to show TimeSpan values in the Crosshair Cursor
}
private void ChartControl1_CustomDrawCrosshair(object sender, CustomDrawCrosshairEventArgs e)
{
foreach(CrosshairElementGroup g in e.CrosshairElementGroups)
{
foreach(CrosshairElement el in g.CrosshairElements)
{
TimeSpan ts = TimeSpan.FromTicks((long)el.SeriesPoint.Values[0]);
el.LabelElement.Text = string.Format("{0} - {1}", el.SeriesPoint.Argument, ts);
}
}
}
}
public class MyData
{
public int ID { get; set; }
public DateTime ScannedDateTime { get; set; }
public double TimeTicks
{
get
{
return ScannedDateTime.TimeOfDay.Ticks;
}
}
}