Member 11776147 Ответов: 0

Диаграмма активных отчетов с несколькими рядами, повторяющимися метками оси 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();
           }
       }

0 Ответов