Plotar chart na data correta com Telerik

21/03/2013

0

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:

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:

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

Pjava

Responder

Posts

22/03/2013

Pjava

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.
Responder

21/08/2013

José

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar