Array
(
)

Plotar chart na data correta com Telerik

Pjava
   - 21 mar 2013

Tenho um gráfico gerado pelo Telerik. Eu preciso que esse gráfico plote em determinada data, tipo assim:
Meu eixo X é formado pelos 10 últimos dias corridos anteriormente, ou seja, Now-10. Então, em determinada situação eu tenho dados em alguns dias e pode ser que outros não. Eu não estou conseguindo é colocar o gráfico do dia tal, na posição correta no eixo X, tipo. Gráfico do dia 19/03/13, deve ser plotado nessa posição no Eixo X, mas o que está acontecendo é que ele está começando na primeira posição do eixo X, mesmo que eu tenha apenas um gráfico, do dia 19/03/13, ele plota na posição 10/03/13 e não 19/03/13 que seria o correto. Alguém já usou o Telerik e sabe me dizer o que fazer? Abaixo o meu código e a minha query:
#Código

GraficoCadastroBL bl = new GraficoCadastroBL();
            bl.Execute(123);

            radChart1.Height = 400;
            radChart1.Width = 1024;
            radChart1.ChartTitle.TextBlock.Text = bl.nomeTituloChart;

            radChart1.ChartTitle.TextBlock.Appearance.Position.AlignedPosition = Telerik.Charting.Styles.AlignedPositions.Center;
            radChart1.ChartTitle.Appearance.Dimensions.AutoSize = false;
            radChart1.ChartTitle.Appearance.Dimensions.Height = 50;
            radChart1.ChartTitle.Appearance.Dimensions.Width = 750;
            radChart1.ChartTitle.Appearance.Dimensions.Margins.Left = 0;// Telerik.Charting.Styles.Unit.Percentage(5);
            radChart1.ChartTitle.Appearance.Dimensions.Margins.Right = 0;// Telerik.Charting.Styles.Unit.Percentage(5);

            radChart1.Legend.Appearance.Position.AlignedPosition = Telerik.Charting.Styles.AlignedPositions.Bottom;
            radChart1.Legend.Appearance.Overflow = Telerik.Charting.Styles.Overflow.Row;
            radChart1.Legend.Appearance.Dimensions.AutoSize = false;
            radChart1.Legend.Appearance.Dimensions.Height = 25;
            radChart1.Legend.Appearance.Dimensions.Width = 400;
            radChart1.Legend.Appearance.Border.Color = System.Drawing.Color.Transparent;
            radChart1.Legend.Appearance.Position.AlignedPosition = Telerik.Charting.Styles.AlignedPositions.Bottom;
            radChart1.Legend.TextBlock.Appearance.Position.AlignedPosition = Telerik.Charting.Styles.AlignedPositions.Center;

            radChart1.PlotArea.Appearance.FillStyle.FillType = Telerik.Charting.Styles.FillType.Solid;
            radChart1.PlotArea.Appearance.FillStyle.MainColor = System.Drawing.Color.Transparent;
            radChart1.PlotArea.Appearance.Border.Visible = false;

            radChart1.PlotArea.Appearance.Dimensions.Margins.Top = Telerik.Charting.Styles.Unit.Percentage(20);
            radChart1.PlotArea.Appearance.Dimensions.Margins.Bottom = Telerik.Charting.Styles.Unit.Percentage(30);
            radChart1.PlotArea.Appearance.Dimensions.Margins.Left = Telerik.Charting.Styles.Unit.Percentage(5);
            radChart1.PlotArea.Appearance.Dimensions.Margins.Right = Telerik.Charting.Styles.Unit.Percentage(5);
            radChart1.PlotArea.Appearance.Dimensions.Width = 800; // Telerik.Charting.Styles.Unit.Pixel(400);

            radChart1.PlotArea.XAxis.LayoutMode = Telerik.Charting.Styles.ChartAxisLayoutMode.Inside;
            radChart1.PlotArea.XAxis.AutoScale = false;
            radChart1.PlotArea.XAxis.IsZeroBased = false;
            radChart1.PlotArea.XAxis.Appearance.MajorGridLines.Visible = false;
            radChart1.PlotArea.XAxis.Appearance.TextAppearance.AutoTextWrap = Telerik.Charting.Styles.AutoTextWrap.True;
            radChart1.PlotArea.XAxis.Appearance.LabelAppearance.Position.AlignedPosition = Telerik.Charting.Styles.AlignedPositions.Top;
            radChart1.PlotArea.XAxis.Appearance.TextAppearance.TextProperties.Font = new System.Drawing.Font("Arial", 8);
            radChart1.PlotArea.XAxis.Appearance.ValueFormat = Telerik.Charting.Styles.ChartValueFormat.LongDate;
            radChart1.PlotArea.XAxis.Appearance.CustomFormat = "dd ddd";

            radChart1.Legend.Appearance.ItemMarkerAppearance.Dimensions.Width = 25;

            radChart1.Legend.Appearance.ItemMarkerAppearance.Figure = Telerik.Charting.Styles.DefaultFigures.Rectangle;
            
            //radChart1.Series[1].Appearance.LabelAppearance.LabelLocation = Telerik.Charting.Styles.StyleSeriesItemLabel.ItemLabelLocation.Inside;
            //radChart1.Series[2].Appearance.LabelAppearance.LabelLocation = Telerik.Charting.Styles.StyleSeriesItemLabel.ItemLabelLocation.Inside;

            this.Panel1.Controls.Add(radChart1);

            ChartSeries chartSeries1 = radChart1.CreateSeries("Dia Anterior", System.Drawing.Color.Red, System.Drawing.Color.Red, ChartSeriesType.StackedBar100);
            ChartSeries chartSeries2 = radChart1.CreateSeries("A Realizar", System.Drawing.Color.Green, System.Drawing.Color.Green, ChartSeriesType.StackedBar100);
            ChartSeries chartSeries3 = radChart1.CreateSeries("Realizado", System.Drawing.Color.Blue, System.Drawing.Color.Blue, ChartSeriesType.StackedBar100);

            ChartSeries chartSeries4 = radChart1.CreateSeries("Média Diária", System.Drawing.Color.Black, System.Drawing.Color.Black, ChartSeriesType.Line);

            chartSeries1.Type = ChartSeriesType.StackedBar100;
            chartSeries2.Type = ChartSeriesType.StackedBar100;
            chartSeries3.Type = ChartSeriesType.StackedBar100;

            chartSeries4.Type = ChartSeriesType.Line;

            //A orientação do gráfico
            radChart1.SeriesOrientation = ChartSeriesOrientation.Vertical;

            radChart1.Legend.Appearance.Overflow = Telerik.Charting.Styles.Overflow.Row;
            radChart1.Legend.Appearance.Position.AlignedPosition = Telerik.Charting.Styles.AlignedPositions.Bottom;

            //Plota os valores das barras dentro da própria barra            
            for (int i = 0; i < 2; i++)
            {
                radChart1.Series[i].Appearance.LabelAppearance.LabelLocation = Telerik.Charting.Styles.StyleSeriesItemLabel.ItemLabelLocation.Inside;
            }

            radChart1.PlotArea.XAxis.AddRange(bl.dataInicial.ToOADate(), bl.dataFinal.ToOADate(), bl.dayStep);
            
            chartSeries1.SetValues(bl.doubleArray2008);
            chartSeries2.SetValues(bl.doubleArray2009);
            chartSeries3.SetValues(bl.doubleArray2010);
            chartSeries4.SetValues(bl.doubleArrayVariacao);
  
            chartSeries4.Appearance.LabelAppearance.Visible = false;

A minha query:
#Código
StringBuilder comandoSQL = new StringBuilder();

            comandoSQL.AppendLine(" WITH " +
                        "CTE_A AS " +
                        "(SELECT DT_OPERACAO,COUNT(*) AS QTDEA FROM TRIAGEM GROUP BY DT_OPERACAO)," +
    
                        "CTE_B AS " +
                        "(SELECT COUNT(*) AS QTDEB FROM ATIVIDADE)" + 
    
                        "SELECT " +
                            "CONVERT(VARCHAR,A.DT_OPERACAO,103)AS DATA,A.QTDEA, B.QTDEB, -(A.QTDEA - B.QTDEB) AS DIFERENCA " +
                        "FROM CTE_A AS A " +
                        "CROSS JOIN CTE_B AS B ");

            SqlConnection sqlConexao = new SqlConnection();
            sqlConexao.ConnectionString = ConfigurationManager.ConnectionStrings["connJuridico"].ConnectionString;

            this.comando = new SqlCommand(comandoSQL.ToString(), sqlConexao);
            try
            {
                sqlConexao.Open();
                comando.ExecuteNonQuery();

                SqlDataReader dr = comando.ExecuteReader();

                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        doubleArray2008[i] = Convert.ToDouble(dr["DIFERENCA"].ToString());
                        doubleArray2009[i] = Convert.ToDouble(dr["QTDEA"].ToString());
                        doubleArray2010[i] = Convert.ToDouble(dr["QTDEB"].ToString());
                        i++;
                    }
                }                
            }
            catch (Exception excecao)
            {
                Erro = excecao.Message;
            }
            finally
            {
                sqlConexao.Close();
            }                   

            retorno = true;
            return retorno;

Pjava
   - 22 mar 2013

Resolvi. O problema é que como eu só tinha tres registros, ele plotava somente os tres registros, apartir da primeira posição. Como eu tinha um eixo X, que era carregado por um array de 10 posições, então sempre dava erro. Para resolver isso, criei um array com 10 posições(DateTime) e alterei a query para trazer a data também, aí fiz um for e comparei. Se a data que eu passo no meu arrayData, na posição i, tiver correspondente no outro array, eu preencho o array de dados, senão nada. Isso fez com que o gráfico fosse plotado.

0
|
0

José
   - 21 ago 2013

Obrigado por avisar que sua duvida foi solucionada, sendo assim estou dando o tópico por concluído.

0
|
0