GRAFICOS VB.NET FRAMEWORK 4.0

LEONARDOSILVEIR 09/03/2011 21:12:27
#367597
Pessoal, já andei pesquisando bastante, porém nao encontrei nada que me ajudasse a montar graficos com a ferramenta [Ô]chart[Ô] do microsoft visual studio 2010. peço auxilo quanto a montar um grafico do meu banco em access de uma tabela com o nome dos compradores.

LEONARDOSILVEIR 10/03/2011 13:22:45
#367669
Precisava de algo que fizesse a conexão no banco de dados e criasse o grafico em tempo real. será que é possivel fazer isso?
LEONARDOSILVEIR 11/03/2011 14:56:47
#367795
sugestoes?
LEONARDOSILVEIR 14/03/2011 22:08:34
#367980
Pessoal comecei a montar a função da maneira que preciso, porém estou apanhando na parte do loop, está ocorrendo o erro abaixo, peço ajuda na solução deste erro:
erro:[Ô]Enumeração já finalizada.[Ô]


.Series(0).Points.DataBindXY(xPaises, yPopulacao) ------->> Enumeração já finalizada.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Private Sub btnGraficoColunas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGraficoColunas.Click
Call Abrirconexao()
tabela.Open([Ô]Select NOME_FORNECEDOR, Count(NOME_FORNECEDOR) From DEVOLUCAO_INDIRETOS Group By NOME_FORNECEDOR[Ô], Conexao)

Do While Not tabela.EOF
[ô]define os valoes do eixo x - nome dos paises
Dim xPaises() As String = {tabela.Fields([Ô]NOME_FORNECEDOR[Ô]).Value}

[ô]define os valores do eixo y - milhoes de pessoas
Dim yPopulacao() As Integer = {tabela.Fields([Ô]Expr1001[Ô]).Value}
tabela.MoveNext()

Loop

With Chart1
[ô]define o tipo de gráfico
.Series(0).ChartType = DataVisualization.Charting.SeriesChartType.Column
[ô]define o texto da legenda
.Series(0).LegendText = [Ô]Indíce[Ô]

[ô]define o titulo do eixo y , sua fonte e a cor
.ChartAreas(0).AxisY.Title = [Ô]Qtde[Ô]
.ChartAreas(0).AxisY.TitleFont = New Font([Ô]Times New Roman[Ô], 12, FontStyle.Bold)
.ChartAreas(0).AxisY.TitleForeColor = Color.Blue
[ô]define o titulo do eixo x , sua fonte e a cor
.ChartAreas(0).AxisX.Title = [Ô]Fornecedor[Ô]
.ChartAreas(0).AxisX.TitleFont = New Font([Ô]Times New Roman[Ô], 12, FontStyle.Bold)
.ChartAreas(0).AxisX.TitleForeColor = Color.Blue

[ô]define a paleta de cores usada
.Palette = ChartColorPalette.Fire

[ô]vincula os dados ao gráfico
.Series(0).Points.DataBindXY(xPaises, yPopulacao) ------->> Enumeração já finalizada.
[ô]exibe os valores nos eixos
.Series(0).IsValueShownAsLabel = True
[ô]desabilita a exibição 3D
.ChartAreas(0).Area3DStyle.Enable3D = True

End With

Conexao.Close()
End Sub
[txt-color=#e80000] [/txt-color][txt-color=#e80000] [/txt-color]
PEGUDO 15/03/2011 11:17:53
#368016
Cara, eu posso estar errado mais você está declarando os Arrays mais de uma vez quando os coloca dentro do loop.

Tenta declará-las do lado de fora do loop e dentro do loop colocar ReDim Preserve pra ver se dá jeito:
Alguma coisa como:

[txt-color=#0000f0]Dim[/txt-color] Col [txt-color=#0000f0]As New[/txt-color] Collection
[txt-color=#0000f0]Dim[/txt-color] T() [txt-color=#0000f0]As String[/txt-color]
[txt-color=#0000f0]Dim[/txt-color] X, XXX [txt-color=#0000f0]As Integer[/txt-color] [txt-color=#007100][ô]Variáveis utilizáveis[/txt-color]

[txt-color=#0000f0]For[/txt-color] x = 0 [txt-color=#0000f0]To[/txt-color] 10
Col.Add(x) [txt-color=#007100][ô]Acrescento valores dentro da collection para poder fazer o loop depois[/txt-color]
[txt-color=#0000f0]Next[/txt-color]

[txt-color=#0000f0]Do While Not[/txt-color] XXX = Col.Count [txt-color=#007100][ô]Faça enquanto o valor de XXX não for iqual ao limite da collection[/txt-color]
[txt-color=#0000f0]ReDim Preserve[/txt-color] T(XXX) [txt-color=#007100][ô]Redimensiona o Array com o índice do valor de XXX, sem apagar os valores que já estão dentro[/txt-color]
T(XXX) = XXX [txt-color=#007100][ô]Insere o valor de XXX dentro do mesmo índice que XXX acabou de redimensionar[/txt-color]
XXX += 1 [txt-color=#007100][ô]Acrescenta 1 ao valor de XXX para que não fique em loop eterno[/txt-color]
[txt-color=#0000f0]Loop[/txt-color]


Não tenho certeza mas acho que seu código seria + ou - assim:


[txt-color=#0000f0]Dim[/txt-color] xPaises() [txt-color=#0000f0]As String[/txt-color] [txt-color=#007100][ô]define os valoes do eixo x - nome dos paises[/txt-color]
[txt-color=#0000f0]Dim[/txt-color] yPopulacao() [txt-color=#0000f0]As Integer[/txt-color] [txt-color=#007100][ô]define os valores do eixo y - milhoes de pessoas[/txt-color]
[txt-color=#0000f0]Dim[/txt-color] Contador [txt-color=#0000f0]As Integer[/txt-color]

[txt-color=#0000f0]Do While Not [/txt-color]tabela.EOF
[txt-color=#0000f0]ReDim Preserve[/txt-color] xPaises(Contador)
xPaises(Contador) = {tabela.Fields([txt-color=#e80000][Ô]NOME_FORNECEDOR[Ô][/txt-color]).Value}

[txt-color=#0000f0]ReDim Preserve[/txt-color] yPopulacao(Contador)
yPopulacao(contador) = {tabela.Fields([txt-color=#e80000][Ô]Expr1001[Ô][/txt-color]).Value}
tabela.MoveNext()
[txt-color=#0000f0]Loop[/txt-color]

Espero ter ajudado.
LEONARDOSILVEIR 15/03/2011 23:45:12
#368089
dessa forma dá erro nesse ponto {tabela.Fields([Ô]NOME_FORNECEDOR[Ô]).Value} e {tabela.Fields([Ô]Expr1001[Ô]).Value}
[Ô]value of type [ô]1-dimensional array of object[ô] cannot be converted to [ô]string[ô][txt-color=#e80000] [/txt-color]
PEGUDO 16/03/2011 09:48:47
#368106
Já tentou colocar [Ô][txt-color=#0000f0].ToString[/txt-color][Ô] depois de [Ô][txt-color=#0000f0].Value[/txt-color][Ô]?

Algo como:
xPaises(Contador) = {tabela.Fields([txt-color=#e80000][Ô]NOME_FORNECEDOR[Ô][/txt-color]).Value.ToString}

Ou:
xPaises(Contador) = {tabela.Fields([txt-color=#e80000][Ô]NOME_FORNECEDOR[Ô][/txt-color]).Value}.ToString

Ou jogar uma variável String:
[txt-color=#0000f0]Dim[/txt-color] xPaises() [txt-color=#0000f0]As String[/txt-color] [txt-color=#007100][ô]define os valores do eixo x - nome dos paises[/txt-color]
[txt-color=#0000f0]Dim[/txt-color] yPopulacao() [txt-color=#0000f0]As Integer[/txt-color] [txt-color=#007100][ô]define os valores do eixo y - milhoes de pessoas[/txt-color]
[txt-color=#0000f0]Dim[/txt-color] Contador [txt-color=#0000f0]As Integer[/txt-color]
[txt-color=#0000f0]Dim[/txt-color] VarPais, VarPopulacao [txt-color=#0000f0]As String[/txt-color]

[txt-color=#0000f0]Do While Not[/txt-color] tabela.EOF
[txt-color=#0000f0]ReDim Preserve[/txt-color] xPaises(Contador)
VarPais = {tabela.Fields([txt-color=#e80000][Ô]NOME_FORNECEDOR[Ô][/txt-color]).Value.ToString}
xPaises(Contador) = VarPais

[txt-color=#0000f0]ReDim Preserve[/txt-color] yPopulacao(Contador)
VarPopulacao = {tabela.Fields([txt-color=#e80000][Ô]Expr1001[Ô][/txt-color]).Value.ToString}
yPopulacao(contador) = VarPopulacao
tabela.MoveNext()
[txt-color=#0000f0]Loop[/txt-color]

LEONARDOSILVEIR 16/03/2011 23:32:45
#368213
Consegui fazer da seguinte forma, porém ainda ta com erro no final.


Dim xPaises() As String [ô]define os valores do eixo x - nome dos paises
Dim yPopulacao() As Integer [ô]define os valores do eixo y - milhoes de pessoas
Dim Contador As Integer
Dim VarPais As String
Dim VarPopulacao As Integer

Call Abrirconexao()
tabela.Open([Ô]Select NOME_FORNECEDOR, Count(NOME_FORNECEDOR) From DEVOLUCAO_INDIRETOS Group By NOME_FORNECEDOR[Ô], Conexao)

Do While Not tabela.EOF
ReDim Preserve xPaises(Contador)
VarPais = {tabela.Fields([Ô]NOME_FORNECEDOR[Ô]).Value}.ToString
xPaises(Contador) = VarPais

ReDim Preserve yPopulacao(Contador)
VarPopulacao = tabela.Fields([Ô]Expr1001[Ô]).Value
yPopulacao(Contador) = VarPopulacao
tabela.MoveNext()
Loop

[ô]Dim yValues() As Double = {tabela.Fields([Ô]Expr1001[Ô]).Value}
[ô]Dim xNames() As String = {tabela.Fields([Ô]NOME_FORNECEDOR[Ô]).Value}
With Chart1
.Series(0).ChartType = DataVisualization.Charting.SeriesChartType.Column
.Titles.Add([Ô]Título[Ô])
.Legends.Add([Ô]Default[Ô]).Title = [Ô]Legenda[Ô]
.ChartAreas(0).Area3DStyle.LightStyle = LightStyle.Simplistic
.Palette = ChartColorPalette.Bright
.Series(0).Points.DataBindXY(VarPais, VarPopulacao) ----------->[txt-color=#e80000] no VarPopulacao ocorre o seguinte erro [Ô]system.collections.ienumerable[Ô][/txt-color]
End With

End Sub
Tópico encerrado , respostas não são mais permitidas