none
VSTO 2010 - C# Plotar Gráficos com dados do SQL RRS feed

  • Pergunta

  • Boa tarde!

              Feliz 2013 para todos!

                   Estou tentando plotar um gráfico de linha simples , com no mínimo duas séries(Eixo X: Data e Eixo Y: Série de Preço1 e Série de Preço2, cujos dados são obtidos através de uma consulta SQL a um banco MS Access. Montei o código abaixo mas quando o executo ele carrega a janela sem trazer gráfico algum!

            {      
                using (OleDbConnection cnn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C://Users//Luiz Henrique//Desktop//Piloto_HA//Base___H.mdb"))
                {
                    using (OleDbDataAdapter da = new OleDbDataAdapter("SELECT Data, PRECO1,PRECO2,PRECO3 FROM PriceBase", cnn))
                    {
                        DataTable dt = new DataTable();
                        da.Fill(dt);
                        DataView dv = new DataView();
                        cnn.Close();

                        chart1.ChartAreas.Add("ChartArea1").Area3DStyle.Enable3D = true;                
                        chart1.Series.Clear();
                        chart1.Palette = ChartColorPalette.Pastel;
                        chart1.DataBindCrossTable(dv,"Data","PRECO1","PRECO2","PRECO3");
                        chart1.Titles.Add("AAA x  BBB");                    
                        chart1.Series["AEDU3"].ChartType = SeriesChartType.FastLine;
                        chart1.Series["AMBV4"].ChartType = SeriesChartType.FastLine;
                        chart1.Series["CIEL3"].ChartType = SeriesChartType.FastLine;

                    }

                }
            }

    Muito Obrigado!

    Que Deus nos abençoe!

       

    terça-feira, 1 de janeiro de 2013 16:04

Respostas

  • Olá Luiz,
    Tudo beleza?

    Montei o seguinte código, espero que seja útil.

    1 - Criei este código XHTML para o gráfico.

            <asp:Chart ID="Chart1" runat="server">
                <Series>
                    <asp:Series Name="Series1">
                    </asp:Series>
                    <asp:Series Name="Series2">
                    </asp:Series>
                    <asp:Series Name="Series3">
                    </asp:Series>
                </Series>
                <ChartAreas>
                    <asp:ChartArea Name="ChartArea1">
                    </asp:ChartArea>
                </ChartAreas>
            </asp:Chart>

    2 - Criei um método para renderizar os dados do seu DataTable.

    private static void BindLineChart(Chart currentChart, DataTable data)
            {
                // Limpar dados existentes no gráfico
                foreach (var itemSerie in currentChart.Series)
                {
                    if (itemSerie.Points != null)
                        itemSerie.Points.Clear();
                }
    
                currentChart.Series[0].ChartType = 
                    currentChart.Series[1].ChartType = 
                        currentChart.Series[2].ChartType = SeriesChartType.Line;
                
                string legend = string.Empty;
                double plotY1, plotY2, plotY3;
    
                plotY1 = plotY2 = plotY3 = 0.0;
             
                Random random = new Random();
                for (int pointIndex = 0; pointIndex < data.Rows.Count; pointIndex++)
                {
                    DataRow currentRow = data.Rows[pointIndex];
    
                    legend = Convert.ToDateTime(currentRow["DATA"]).ToString("dd/MM/yyyy");
                    plotY1 = Convert.ToDouble(currentRow["PRECO1"]);
                    plotY2 = Convert.ToDouble(currentRow["PRECO2"]);
                    plotY3 = Convert.ToDouble(currentRow["PRECO3"]);
    
                    currentChart.Series[0].Points.InsertXY(pointIndex, legend, new object[] { plotY1 });
                    currentChart.Series[1].Points.InsertXY(pointIndex, legend, new object[] { plotY2 });
                    currentChart.Series[2].Points.InsertXY(pointIndex, legend, new object[] { plotY3 });
                }
            }

    3 - No fim, vc seu código deve ter o método acima, e fazer a seguinte chamada:

                 using (OleDbConnection cnn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C://Users//Luiz Henrique//Desktop//Piloto_HA//Base___H.mdb"))
                 {
                     using (OleDbDataAdapter da = new OleDbDataAdapter("SELECT Data, PRECO1,PRECO2,PRECO3 FROM PriceBase", cnn))
                     {
                         DataTable dt = new DataTable();
                         da.Fill(dt);
                         cnn.Close();
    
                         chart1.ChartAreas.Add("ChartArea1").Area3DStyle.Enable3D = true;                
                         chart1.Palette = ChartColorPalette.Pastel;
                         chart1.Titles.Add("AAA x  BBB");
    
                         BindLineChart(this.chart1, dt);
                     }
    
                 }
             }

    []s!

    MSc. Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Visual C#
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Sugerido como Resposta Priscila Mayumi Sato quinta-feira, 10 de janeiro de 2013 12:23
    • Marcado como Resposta luizstudy terça-feira, 15 de janeiro de 2013 19:45
    quarta-feira, 2 de janeiro de 2013 10:21
    Moderador