GRAFICOS VB.NET FRAMEWORK 4.0
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.
Precisava de algo que fizesse a conexão no banco de dados e criasse o grafico em tempo real. será que é possivel fazer isso?
sugestoes?
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]
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]
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.
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.
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]
[Ô]value of type [ô]1-dimensional array of object[ô] cannot be converted to [ô]string[ô][txt-color=#e80000] [/txt-color]
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]
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]
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
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