GRAFICO A PARTIR DE UM GRIDVIEW

ROGERIOAZEVEDO 29/08/2012 09:43:50
#408832
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.
KERPLUNK 29/08/2012 09:45:38
#408833
Resposta escolhida
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.
ROGERIOAZEVEDO 29/08/2012 10:26:15
#408839
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);
}

}
ROGERIOAZEVEDO 29/08/2012 11:13:30
#408844
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[Ô]);
KERPLUNK 29/08/2012 11:42:53
#408850
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:

//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