GRAFICO A PARTIR DE UM GRIDVIEW
Bom dia.
Estou fazendo uma aplicação simples em C#. Tenho um GRID que pega as informações do banco de dados. Essa parte está funcionando perfeitamente, agora preciso pegar esses dados da GRID e apresentar em um gráfico. A grid tem apenas 2 colunas conforme abaixo:
Filial Venda
A 1.000,00
B 2.000,00
C 3.000,00
D 2.000,00
E 1.500,00
Coloquei o Chat no form, mas não sei como fazer a integração. Abraços.
Estou fazendo uma aplicação simples em C#. Tenho um GRID que pega as informações do banco de dados. Essa parte está funcionando perfeitamente, agora preciso pegar esses dados da GRID e apresentar em um gráfico. A grid tem apenas 2 colunas conforme abaixo:
Filial Venda
A 1.000,00
B 2.000,00
C 3.000,00
D 2.000,00
E 1.500,00
Coloquei o Chat no form, mas não sei como fazer a integração. Abraços.
Venho mais uma vez reiterar: GRID não é fonte de dados. Da mesma forma que você preenche o grid, você vai fazer pra gerar o gráfico.
Bom dia.
Essa informação já foi bastante útil, eu nunca mexi com chart, não fazia nem ideia em como pesquisar. O meu código para popular o GRID é o código abaixo, o código para popular o chart é semelhante?
private void Carregar()
{
try
{
//Cria um DataTable
DataTable tabela = new DataTable();
//Define a String de conexão com o SQL Server
string strConn = [Ô]Server = MEUIP; Initial Catalog=BANCO; Integrated Security = True[Ô];
//Abre a conexão
SqlConnection conn = new SqlConnection(strConn);
//Cria um DataAdapter selecionando os Dados de uma Tabela do SQL Server
SqlDataAdapter da = new SqlDataAdapter([Ô]SELECT Filial, Sum(Vendas) as vendas[Ô]
+ [Ô] FROM Vendometro[Ô]
+ [Ô] WHERE data BETWEEN [ô]2012/08/01 00:00:00[ô] AND [ô]2012/08/31 23:59:59[ô][Ô]
+ [Ô] GROUP BY Filial[Ô]
+ [Ô] ORDER BY Filial[Ô], conn);
//Preenche o DataTable
da.Fill(tabela);
//Exibe os dados no DataGridView
dvgVendas.DataSource = tabela.DefaultView;
this.dvgVendas.Columns[[Ô]Vendas[Ô]].DefaultCellStyle.Format = [Ô]c[Ô];
this.dvgVendas.Columns[[Ô]Vendas[Ô]].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
this.dvgVendas.Columns[[Ô]Filial[Ô]].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
this.dvgVendas.Columns[[Ô]Filial[Ô]].Width = 50;
}
catch (Exception ex)
{
MessageBox.Show([Ô]Erro : [Ô] + ex.Message);
}
}
Essa informação já foi bastante útil, eu nunca mexi com chart, não fazia nem ideia em como pesquisar. O meu código para popular o GRID é o código abaixo, o código para popular o chart é semelhante?
private void Carregar()
{
try
{
//Cria um DataTable
DataTable tabela = new DataTable();
//Define a String de conexão com o SQL Server
string strConn = [Ô]Server = MEUIP; Initial Catalog=BANCO; Integrated Security = True[Ô];
//Abre a conexão
SqlConnection conn = new SqlConnection(strConn);
//Cria um DataAdapter selecionando os Dados de uma Tabela do SQL Server
SqlDataAdapter da = new SqlDataAdapter([Ô]SELECT Filial, Sum(Vendas) as vendas[Ô]
+ [Ô] FROM Vendometro[Ô]
+ [Ô] WHERE data BETWEEN [ô]2012/08/01 00:00:00[ô] AND [ô]2012/08/31 23:59:59[ô][Ô]
+ [Ô] GROUP BY Filial[Ô]
+ [Ô] ORDER BY Filial[Ô], conn);
//Preenche o DataTable
da.Fill(tabela);
//Exibe os dados no DataGridView
dvgVendas.DataSource = tabela.DefaultView;
this.dvgVendas.Columns[[Ô]Vendas[Ô]].DefaultCellStyle.Format = [Ô]c[Ô];
this.dvgVendas.Columns[[Ô]Vendas[Ô]].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
this.dvgVendas.Columns[[Ô]Filial[Ô]].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
this.dvgVendas.Columns[[Ô]Filial[Ô]].Width = 50;
}
catch (Exception ex)
{
MessageBox.Show([Ô]Erro : [Ô] + ex.Message);
}
}
Valeu Kerplink eu estava pesquisando de forma incorreta, achei a solução apenas acresci o código abaixo:
DataSet ds = new DataSet();
da.Fill(ds);
DataView firstView = new DataView(ds.Tables[0]);
chart1.Series[0].Points.DataBindXY(firstView, [Ô]Filial[Ô], firstView, [Ô]Vendas[Ô]);
DataSet ds = new DataSet();
da.Fill(ds);
DataView firstView = new DataView(ds.Tables[0]);
chart1.Series[0].Points.DataBindXY(firstView, [Ô]Filial[Ô], firstView, [Ô]Vendas[Ô]);
Como eu imaginei, um DataAdapter.
Bem, pra começo de conversa, DataAdatpter, apesar de ser possÃvel, não é uma boa prática para simples leitura de dados. Se seu objetivo é leitura de dados, use um DataReader.
Segundo, evite usar objetos de dados diretamente com componentes de exibição, como um datagrid, por exemplo.
O melhor é:
1 - Crie uma classe e chame-a(sugestão), TotaisVenda
2 - Coloque duas propriedades: Filial e Total
3 - Faça a leitura dos dados desejados com um datareader.
4 - Percorra o DataReader, e para cada registro, crie uma instância da classe TotaisVenda, preencha seus valores com os dados do registro e adicione em uma lista genérica
5 - Passe essa lista genérica como fonte de dados do grid e execute o bind, se necessário
Ficaria mais ou menos assim:
Isso tudo é só um exemplo que ainda pode ser muito melhorado, por exemplo, com tratamento adequado de exceções, delegate para leitura dos dados de forma assÃncrona, uma método especÃfico para [Ô]converter[Ô] o DataReader em uma lista de objetos...
Bem, pra começo de conversa, DataAdatpter, apesar de ser possÃvel, não é uma boa prática para simples leitura de dados. Se seu objetivo é leitura de dados, use um DataReader.
Segundo, evite usar objetos de dados diretamente com componentes de exibição, como um datagrid, por exemplo.
O melhor é:
1 - Crie uma classe e chame-a(sugestão), TotaisVenda
2 - Coloque duas propriedades: Filial e Total
3 - Faça a leitura dos dados desejados com um datareader.
4 - Percorra o DataReader, e para cada registro, crie uma instância da classe TotaisVenda, preencha seus valores com os dados do registro e adicione em uma lista genérica
5 - Passe essa lista genérica como fonte de dados do grid e execute o bind, se necessário
Ficaria mais ou menos assim:
//Define a String de conexão com o SQL Server
string strConn = [Ô]Server = MEUIP; Initial Catalog=BANCO; Integrated Security = True[Ô];
//Abre a conexão
using (SqlConnection conn = new SqlConnection(strConn))
{
using (SqlCommand cmd = new SqlCommand([Ô][Ô], conn))
{
string sql = [Ô]SELECT Filial, Sum(Vendas) as vendas[Ô]
+ [Ô] FROM Vendometro[Ô]
+ [Ô] WHERE data BETWEEN [ô]2012/08/01 00:00:00[ô] AND [ô]2012/08/31 23:59:59[ô][Ô]
+ [Ô] GROUP BY Filial[Ô]
+ [Ô] ORDER BY Filial[Ô]
cmd.CommandText = sql;
List<TotaisVenda> totais = null;
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.HasRows)
{
totais = new List<TotaisVenda>();
while (dr.Read())
{
TotaisVenda tot = new TotaisVenda();
TotaisVenda.Filial = dr.GetString(dr.GetOrdinal([Ô]Filial[Ô]));
TotaisVenda.Total = dr.GetDouble(dr.GetOrdinal([Ô]vendas[Ô]));
totais.Add(tot);
}
}
}
//Nesse ponto, se o select retornou algo, você já vai ter uma lista dos dados na variável [Ô]totais[Ô]
dgvVendas.DataSource = totais;
Isso tudo é só um exemplo que ainda pode ser muito melhorado, por exemplo, com tratamento adequado de exceções, delegate para leitura dos dados de forma assÃncrona, uma método especÃfico para [Ô]converter[Ô] o DataReader em uma lista de objetos...
Tópico encerrado , respostas não são mais permitidas