Usar MSChart para criar um gráfico agrupado

20/08/2012

0

Usei o código abaixo para criar um gráfico com agrupamento por mês

<private void MontaGraficoGeral()
{
DateTime data = new DateTime();
string sql = "";
string ano = "";
string mesSQL = "";
string sSQL = "";
int anoAtual = 0;
int anoInicial = 0;
string connStringSQL ="Data Source=BANCO;Initial Catalog=CONTROLE;Persist Security Info=True;User ID=;Password=";
DataTable result = new DataTable();
double plotaY1 = 0;
double plotaY2 = 0;
data = DateTime.Now;
anoAtual = data.Year;
anoInicial = anoAtual - 2;

sSQL = "SELECT SUM(FATURA.VALOR) AS VALOR, CASE WHEN LEFT(CENTROCUSTO.CCDESCR, 3) = AJA THEN J WHEN LEFT(CENTRO_CUSTO.CCDESCR, 3) = ALO THEN L WHEN LEFT(CENTRO_CUSTO.CCDESCR, 3) = APA THEN P WHEN LEFT(CENTRO_CUSTO.CCDESCR, 3) = CON THEN PA WHEN LEFT(CENTRO_CUSTO.CCDESCR, 3) = SO THEN S END AS CCUSTO, CASE WHEN FATURA.MES = 01 THEN Janeiro WHEN FATURA.MES = 02 THEN Fevereiro WHEN FATURA.MES = 03 THEN Março WHEN FATURA.MES = 04 THEN Abril WHEN FATURA.MES = 05 THEN Maio WHEN FATURA.MES = 06 THEN Junho WHEN FATURA.MES = 07 THEN Julho WHEN FATURA.MES = 08 THEN Agosto WHEN FATURA.MES = 09 THEN Setembro WHEN FATURA.MES = 10 THEN Outubro WHEN FATURA.MES = 11 THEN Novembro WHEN FATURA.MES = 12 THEN Dezembro END AS MES FROM FATURA INNER JOIN CHI ON FATURA.ID = CHI.ID INNER JOIN LISTA ON CHI.ID = LISTA.ID INNER JOIN CENTROCUSTO ON LISTA.CCUSTO_ID = CENTROCUSTO.CCUSTO_ID WHERE (FATURA.ANO = 2012) GROUP BY LEFT(CENTROCUSTO.CCDESCR, 3), FATURA.MES";

using (SqlConnection conn = new SqlConnection(connStringSQL))
{
using (SqlCommand cmd = new SqlCommand())
{
conn.Open();
cmd.CommandText = sSQL;
cmd.Connection = conn;
SqlDataReader dr;
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
result.Load(dr);
dr = null;
}
}

Chart1.Series.Add("J");
Chart1.Series.Add("L");
Chart1.Series.Add("P");
Chart1.Series.Add("PA");
Chart1.Series.Add("S");


for(int ind = 0; ind < result.Rows.Count; ind ++)
{
plotaY1 = Convert.ToInt64(result.Rows[ind]["VALOR"]);
if(result.Rows[ind]["CCUSTO"].Equals("J"))
{
Chart1.Series["J"].Points.AddY(plotaY1);
Chart1.Series["J"].XValueMember = "MES";
Chart1.Series["J"].YValueMembers = "VALOR";
Chart1.Series["J"].IsValueShownAsLabel = true;
}
else if(result.Rows[ind]["CCUSTO"].Equals("L"))
{
Chart1.Series["L"].Points.AddY(plotaY1);
Chart1.Series["L"].XValueMember = "MES";
Chart1.Series["L"].YValueMembers = "VALOR";
Chart1.Series["L"].IsValueShownAsLabel = true;
}
else if(result.Rows[ind]["CCUSTO"].Equals("P"))
{
Chart1.Series["P"].Points.AddY(plotaY1);
Chart1.Series["P"].XValueMember = "MES";
Chart1.Series["P"].YValueMembers = "VALOR";
Chart1.Series["P"].IsValueShownAsLabel = true;
}
else if(result.Rows[ind]["CCUSTO"].Equals("PA"))
{
Chart1.Series["PA"].Points.AddY(plotaY1);
Chart1.Series["PA"].XValueMember = "MES";
Chart1.Series["PA"].YValueMembers = "VALOR";
Chart1.Series["PA"].IsValueShownAsLabel = true;
}
else if(result.Rows[ind]["CCUSTO"].Equals("S"))
{
Chart1.Series["S"].Points.AddY(plotaY1);
Chart1.Series["S"].XValueMember = "MES";
Chart1.Series["S"].YValueMembers = "VALOR";
Chart1.Series["S"].IsValueShownAsLabel = true;
}
}

Chart1.DataSource = result;

string TipoGrafico = "Custo Mensal";
string TituloX = "Meses";
string TituloY = "Valor";

Chart1.Titles.Add(TipoGrafico);
Chart1.ChartAreas["ChartArea1"].AxisX.Title = "Mês";
Chart1.ChartAreas["ChartArea1"].AxisX.TitleForeColor = Color.Blue;

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

Chart1.Series["J"].ChartType = SeriesChartType.Column;
Chart1.Series["L"].ChartType = SeriesChartType.Column;
Chart1.Series["P"].ChartType = SeriesChartType.Column;
Chart1.Series["PA"].ChartType = SeriesChartType.Column;
Chart1.Series["S"].ChartType = SeriesChartType.Column;

// define as margens
Chart1.ChartAreas["ChartArea1"].AxisX.IsMarginVisible = true;

//define a cor de fundo
Chart1.ChartAreas["ChartArea1"].BackColor = Color.White;

//exibe/oculta as linhas dos eixos no corpo do gráfico
Chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false;
Chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.Enabled = false;

//efeito visual nas colunas
Chart1.Series["J"]["DrawingStyle"] = "Emboss";
Chart1.Series["L"]["DrawingStyle"] = "Emboss";
Chart1.Series["P"]["DrawingStyle"] = "Emboss";
Chart1.Series["PA"]["DrawingStyle"] = "Emboss";
Chart1.Series["S"]["DrawingStyle"] = "Emboss";

//exibe valor de cada coluna
Chart1.Series["J"].IsValueShownAsLabel = true;
Chart1.Series["L"].IsValueShownAsLabel = true;
Chart1.Series["P"].IsValueShownAsLabel = true;
Chart1.Series["P"].IsValueShownAsLabel = true;
Chart1.Series["S"].IsValueShownAsLabel = true;

//exibe a legenda
Chart1.Legends[0].Enabled = true;

//monta o grafico na tela
Chart1.DataBind();

}/>

mas o gráfico esta sendo criado conforme abaixo

[url]http://img696.imageshack.us/img696/8066/154425.gif[/url]

conforme retangulo azul destacando os meses estão se repetindo ao invés de aparecer julho uma vez com 5 series e agosto com 3 series.

Poderiam me auxliar?

Carlos Julianelli

Carlos Julianelli

Responder

Posts

23/08/2012

Paulo Freire

Ola Julianelli, porque vc não usa o Libero, acho ele muito mais simples e prático, principalmente no que pretendes.

http://liberofusioncharts.codeplex.com/
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