Usuário com melhor resposta
Usar MSChart para criar um gráfico agrupado

Pergunta
-
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
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?
Respostas
-
Segue abaixo o resultado da consulta
eu estou tentando fazer o gráfico assim eixo de x mes julho plotar uma série com valor J, L, P, PA, S mes Agosto plotar uma serie J, PA, S e não repetir o mes conforme está acontecendo
- Marcado como Resposta Julianelli sexta-feira, 24 de agosto de 2012 23:21
Todas as Respostas
-
-
Segue abaixo o resultado da consulta
eu estou tentando fazer o gráfico assim eixo de x mes julho plotar uma série com valor J, L, P, PA, S mes Agosto plotar uma serie J, PA, S e não repetir o mes conforme está acontecendo
- Marcado como Resposta Julianelli sexta-feira, 24 de agosto de 2012 23:21
-
-