none
MS Chart - Mostar todos os dados RRS feed

  • Pergunta

  • Pessoal,

    Criei um gráfico, utilizando o MS Chart. Só que ele não mostra todos os dados, ele tipo agrupa alguns dados. No exemplo que criei, na coluna horizontal, que mostra os dias do mês, ele não mostra os dias do 1-31. Mostra apenas alguns dias, tem como fazer mostrar todos os dias?

    Exemplo que criei:

     

    sexta-feira, 21 de janeiro de 2011 03:21

Respostas

  • Bom dia!

    Passei por  este problema, e resolvi com este trecho de código. e resolvi alterando o intervalo do eixo X.

    Chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1;
    

     Se ajudar avise-me!!

     

    Abraço!

    • Sugerido como Resposta Erysson Souza sexta-feira, 21 de janeiro de 2011 12:09
    • Marcado como Resposta Guilherme_ sexta-feira, 21 de janeiro de 2011 12:46
    sexta-feira, 21 de janeiro de 2011 10:49

Todas as Respostas

  • Posta o code
    Não esqueça de usar o componente </> na barra para posta seu código.
    sexta-feira, 21 de janeiro de 2011 10:23
    Moderador
  • Bom dia!

    Passei por  este problema, e resolvi com este trecho de código. e resolvi alterando o intervalo do eixo X.

    Chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1;
    

     Se ajudar avise-me!!

     

    Abraço!

    • Sugerido como Resposta Erysson Souza sexta-feira, 21 de janeiro de 2011 12:09
    • Marcado como Resposta Guilherme_ sexta-feira, 21 de janeiro de 2011 12:46
    sexta-feira, 21 de janeiro de 2011 10:49
  • Oi Cleber, funcionou! =)

    Aproveitando, tem como montar um gráfico comparativo de dados? Tipo, no gráfico que postei, gostaria de adicionar mais um gráfico que compara com outro valor. O gráfico em azul, é os dados de um mês, e gostaria de criar mais um gráfico em verde, com os dados de outro mês. Isso é possível com o ms chart?

    sexta-feira, 21 de janeiro de 2011 11:13
  • Gostaria de um novo gráfico, ou uma nova série, ou seja...

    os de um mes em colunas azuis , e os do outro mes em colunas vermelhas?

    ou duas chartareas? que ficam dois graficos separados...?


    Att. Cléber

    sexta-feira, 21 de janeiro de 2011 13:28
  • Seria no mesmo gráfico. Um mês de uma cor, e de outro mês de outra cor.
    sexta-feira, 21 de janeiro de 2011 15:57
  • Guilherme,

    Eu fiz assim...

    No asp, criei um objeto Chart sem definições de series e com uma chartarea conforme abaixo:

          <asp:Chart ID="Chart2" runat="server" Height="500px" Width="800px">
            <series>
            </series>
            <chartareas>
              <asp:ChartArea Name="ChartArea1">
              </asp:ChartArea>
            </chartareas>
          </asp:Chart>
    

     

    Em um botão x chamo o método abaixo. ele esta bem comentado, mas preste atenção no momento que cria as series, eu uso uma consulta pra pegar os ultimos dois anos, ja que nao possuo uma coluna para isso no banco.

    Depois que cria as séries para os anos, e nomeia com o proprio ano ele atribui os dados normalmente fazendo um de cada vez. (não sei se há um metodo mais facil, pois quando desenvolvi esta rotina, nao existia muitos topicos sobre o assunto, fiz uma coletanea de posts ate chegar neste resultado).

    pois bem, segue o código:

        public void MontaGraficoGeral()
        {
          DateTime data = new DateTime(); // cria o objeto data
          string sql = "";
          string ano = "";
          string anosSql = "";
          string sSQL = "";
          int anoatual = 0;
          int anoincial = 0;
          int ano1Serie = 0;
          int ano2Serie = 0;
          string connString = GetconnString();
          DataTable result = new DataTable();
    
          double plotaY1 = 0;
          double plotaY2 = 0;
    
          data = DateTime.Now; //define a data como data atual
          anoatual = data.Year; // pega o ano atual
          anoincial = anoatual - 2; // define o ano inicial com que sempre será 3 anos a menos que o atual 
    
          ano1Serie = anoatual - 1;
          ano2Serie = anoatual;
    
          while (anoincial <= anoatual)
          {
            ano = anoincial.ToString(); // pega o objeto data (ano) e converte para string 
            sql += "SUM(DECODE(TBIN.ANO,'" + ano + "',TOTAL,0) )" + @"""" + ano + @"""" + ","; // concatena com a string geral a string com o ano do while
            anoincial++;
          }
    
          anosSql = sql; //define a variavel com toda a string , com todos os anos
          anosSql = anosSql.Substring(0, anosSql.Length - 1); //remove o ultimo caracter da string, no caso sempre a virgula 
    
          //monta o sql que será usado para montar o datatable
          sSQL = " SELECT " +
                " TBIN.SIGLAUNIDADE, " +
                anosSql +
                " FROM ( " +
                      " SELECT " +
                        " TO_CHAR(DTCRIACAO,'YYYY') AS ANO, " +
                        " COUNT(IDFORMULARIO) AS TOTAL, " +
                        " SIGLAUNIDADE " +
                      " FROM " +
                        " PAD_FORM_ESTATISTICAS " +
                      " GROUP BY " +
                      " TO_CHAR(DTCRIACAO,'YYYY') , " +
                      " SIGLAUNIDADE " +
                      " ORDER BY " +
                      " SIGLAUNIDADE " +
                " ) TBIN " +
                " GROUP BY " +
                " TBIN.SIGLAUNIDADE " +
                " ORDER BY " +
                " TBIN.SIGLAUNIDADE ";
    
          using (OracleConnection conn = new OracleConnection(connString))
          {
            using (OracleCommand cmd = new OracleCommand())
            {
              conn.Open();
              cmd.CommandText = sSQL;
              cmd.Connection = conn;
              OracleDataReader dr;
              dr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
              result.Load(dr);
              dr = null;
            }
          }
    
          string ano1 = ano1Serie.ToString();
          string ano2 = ano2Serie.ToString();
    
          Chart2.Series.Add(ano1);
          Chart2.Series.Add(ano2);
    
          if (Chart2.Series[ano1].Points.Count > 0)
          {
            plotaY1 = Chart2.Series[ano1].Points[Chart2.Series[ano1].Points.Count - 1].YValues[0];
          }
    
          if (Chart2.Series[ano2].Points.Count > 0)
          {
            plotaY2 = Chart2.Series[ano2].Points[Chart2.Series[ano2].Points.Count - 1].YValues[0];
          }
    
          for (int ind = 0; ind < result.Rows.Count; ind++)
          {
            plotaY1 = Convert.ToInt64(result.Rows[ind][ano1]);
            Chart2.Series[ano1].Points.AddY(plotaY1);
    
            plotaY2 = Convert.ToInt64(result.Rows[ind][ano2]);
            Chart2.Series[ano2].Points.AddY(plotaY2);
          }
    
          Chart2.DataSource = result;
    
          Chart2.Series[ano1].XValueMember = "SIGLAUNIDADE";
          Chart2.Series[ano1].YValueMembers = ano1;
          Chart2.Series[ano1].IsValueShownAsLabel = true;
    
          Chart2.Series[ano2].XValueMember = "SIGLAUNIDADE";
          Chart2.Series[ano2].YValueMembers = ano2;
          Chart2.Series[ano2].IsValueShownAsLabel = true;
    
          // usando função genérica
          string TipoGrafico = "Geral";
          string TituloX = "UNIDADES";
          string TituloY = "TOTAIS";
    
          //chama a função para escrever os titulos dos eixos
          Titulos(TipoGrafico, TituloX, TituloY);
    
          //chama a função para montar a legenda
          GetLegenda(TipoGrafico);
    
          //valor que define o intervalo dos valores de x
          Chart2.ChartAreas["ChartArea1"].AxisX.Interval = 1;
    
          // define o tipo de grafico 
          Chart2.Series[ano1].ChartType = SeriesChartType.Column;
          Chart2.Series[ano2].ChartType = SeriesChartType.Column;
    
          // define as margens
          Chart2.ChartAreas["ChartArea1"].AxisX.IsMarginVisible = true;
    
          //define a cor de fundo
          Chart2.ChartAreas["ChartArea1"].BackColor = Color.White;
    
          //exibe/oculta as linhas dos eixos no corpo do gráfico
          Chart2.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false;
          Chart2.ChartAreas["ChartArea1"].AxisY.MajorGrid.Enabled = false;
    
          //efeito visual nas colunas
          Chart2.Series[ano1]["DrawingStyle"] = "Emboss";
          Chart2.Series[ano2]["DrawingStyle"] = "Emboss";
    
          //exibe valor de cada coluna
          Chart2.Series[ano1].IsValueShownAsLabel = true;
          Chart2.Series[ano2].IsValueShownAsLabel = true;
    
          //exibe a legenda
          Chart2.Legends[0].Enabled = true;
    
          //monta o grafico na tela
          Chart2.DataBind();
        }
    

     

    Não sei se esta confuso, mas acho que da pra ter uma base...

    Abaixo segue o link do resultado final:

    http://farm6.static.flickr.com/5208/5375144903_dc982fb664_b.jpg

    Nao sei se da pra perceber os itens de 2011, pois sao muito boucos e a coluna ficou bem pequena.


    Att. Cléber
    sexta-feira, 21 de janeiro de 2011 16:17
  • Oi Cleber, obrigado pela dica.

    Mas eu consegui fazer, de uma forma mais simples. Apenas adicionei mais 2 Series na tag do Chart, e voilá!  =)

     

    domingo, 23 de janeiro de 2011 13:53
  • oi Guilherme como vc fez pra pegar os dados do banco e colocar no grafico...preciso fazer algo pra mim mostrar a produtividade  de em profissional em grafico do tipo pizza, sou leiga na parte grafica se puder me dar um exemplo... muito obrigada
    quinta-feira, 27 de janeiro de 2011 18:43