Диаграмма активных отчетов с несколькими рядами, повторяющимися метками оси x
Я пытаюсь создать диаграмму .net ActiveReport с 3 различными сериями
Тип ряд1 = линия, ряда2 тип = строку и введите выводятся в ряд series3 = бар. Datatable был использован для извлечения данных из базы данных, а затем данные каждого столбца преобразуются в коллекцию списков, чтобы использовать метод DataBindXY (). Проблема, с которой я столкнулся, такова :
1) Каждая серия использует свои собственные метки оси x, они не разделяют диапазон меток оси x, поэтому в метке оси x есть дубликаты данных.
2) Series2 (Bar 2D) не запускается с правильными данными оси x, то есть мои данные для гистограммы (2004,-25), (2030,-65). Скорее всего, он начинается с (1000,-25) и (2004,-65)
Я также попытался построить ряд, передавая статические значения в методе Databindxy, код комментируется ниже.
Я новичок в activereports и сталкиваюсь с большим количеством проблем
----------------------------------------------------------------
Что я уже пробовал:
private void reportHeader1_Format(object sender, EventArgs e) { if (dbConnection == null || inspectionID < 1) { return; } GrapeCity.ActiveReports.Chart.Series series1 = new GrapeCity.ActiveReports.Chart.Series(); series1.Type = GrapeCity.ActiveReports.Chart.ChartType.Bar2D; DataSet tds = GetDetail(inspectionID); if (tds != null) { if (tds.Tables[0].Rows.Count > 0) { DataRow tdr = tds.Tables[0].Rows[0]; if (tdr != null) { /// Series 3 - series type is Bar 2D List<double> bentSounding = new List<double>(); List<double> bentDistance = new List<double>(); for (int index = 0; index < tds.Tables[0].Rows.Count; index++) { string bentValue = tds.Tables[0].Rows[index]["Bent"].ToString(); if (bentValue != "") { bentSounding.Add(0); bentDistance.Add(Double.Parse(tds.Tables[0].Rows[index]["station"].ToString())); } } // series 1 - type is line Double MinWSDist = 0D, MaxWSDist = 0D, MinWSSounding = 0D, MaxWSSounding = 0D; int MinIndex = 0; int MaxIndex = 0; List<double> wsSounding = new List<double>(); List<double> wsDistance = new List<double>(); for (int index = 0; index < tds.Tables[0].Rows.Count; index++) { string waterSurfaceValue = tds.Tables[0].Rows[index]["Water_Surface"].ToString(); if (waterSurfaceValue != "") { wsSounding.Add(Double.Parse(tds.Tables[0].Rows[index]["downstream"].ToString())*-1); wsDistance.Add(Double.Parse(tds.Tables[0].Rows[index]["station"].ToString())); } } // get max and min value in watersurface MaxWSDist = wsDistance.Max(); MaxIndex = wsDistance.FindIndex(s => s == MaxWSDist); MinWSDist = wsDistance.Min(); MinIndex = wsDistance.FindIndex(s => s == MinWSDist); MaxWSSounding = wsSounding.ElementAt(MaxIndex); MinWSSounding = wsSounding.ElementAt(MinIndex); //series 0 type is line List<double> sounding = new List<double>(); List<double> distance = new List<double>(); for (int index = 0; index < tds.Tables[0].Rows.Count; index++) { sounding.Add(Double.Parse(tds.Tables[0].Rows[index]["downstream"].ToString()) * -1); } for (int index = 0; index < tds.Tables[0].Rows.Count; index++) { distance.Add(Double.Parse(tds.Tables[0].Rows[index]["station"].ToString())); } this.chartControl1.Series[0].Points.DataBindXY(distance, sounding); this.chartControl1.Series[1].Points.DataBindXY(new[] { MinWSDist, MaxWSDist }, new[] { MinWSSounding, MaxWSSounding }); this.chartControl1.Series[2].Points.DataBindXY(bentDistance, bentSounding); // this.chartControl1.Series[0].Points.DataBindXY(new[] { 1000, 2001, 2005, 2006, 2008, 2010 }, new[] { -35, -05, -35, -38, -20, -10 }); // this.chartControl1.Series[1].Points.DataBindXY(new[] { 1000, 2030 }, new[] { -25, -65 }); // this.chartControl1.Series[2].Points.DataBindXY(new[] { 2000, 2002, 2004 }, new[] { 0, 0, 0 }); } } tds.Dispose(); } }