Array
(
)

Usar MSChart para criar um gráfico agrupado

Julianelli
|
MVP
    20 ago 2012

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
http://img696.imageshack.us/img696/8066/154425.gif
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?

Paulo Freire
|
MVP
    23 ago 2012

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/