Controle MSChart

Não sei se você já  tentou usar o MsChart no VB.NET e provavelmente tive uma dor de cabeça na hora de gerar o gráfico, principalmente se os dados forem provenientes de um banco de dados qualquer. Dei com a cara no teclado quando tive de fazer um trabalho aqui na empresa que gerasse o gráfico de resultados de atendimento, todos que eu tinha feito eram no VB6 mas eu continuei insistindo em fazer com VB.NET.

Más notícias:   O objeto não suporta os tipos de dados provenientes do BindingSource do .NET e eu acredito que também não deve suportar qualquer retorno de dados do ADO.NET ou semelhantes.

A solução seria comprar um dos componentes para gráficos disponíveis na Internet, usar o Excel ou dar um jeito no MSchart via POG (Programação Orientada a Gambiarra).

Vejamos o programa:

Bom, temos aqui meu trabalho de sala :

– Na listbox teremos a lista de matérias e conforme mudamos a matéria, o número da matrícula do infeliz e a média dele na matéria é mostrado no Grid. (PS: Toda parte de dados do programa foi feita com os componentes visuais do VB.NET por extrema preguiça minha de fazer via código, fique a vontade pra fazer da forma que quiser).

Pegue o Código fonte + Banco de Dados em anexo e vamos discutir algumas coisas:  MschartVBNET.zip

A estrutura das tabelas usadas é a seguinte:

ReDim Nota(Me.DBDataSet.Notas.Count – 1)
ReDim NumeroMatricula(Me.DBDataSet.Notas.Count – 1)
AxMSChart.ColumnCount = Me.DBDataSet.Notas.Count
AxMSChart.RowCount = 1
AxMSChart.RowLabel = "Alunos"

Basicamente Redimensionei os arrays conforme a quantidade de linhas que o Dataset retornava (caso você não lembre, no VB.NET os arrays começam em zero, este é o motivo do -1).

.ColumnCount – Tive de marcar previamente a quantidade de colunas que usaríamos, do contrario dava pau na legenda.

.RowCount e .RowLabel – Mesmo motivo.

For Each Row As DataRow In Me.DBDataSet.Notas
    Nota(i) = Row(2)
    NumeroMatricula(i) = Row(0)
    i += 1
Next

Bom, basicamente estamos convertendo nosso DataRow para um array porque a porcaria do MSChart não suporta o DataRow do VB.NET. Um array contém o valor das notas e o outro o número da matrícula que será usado na legenda!

AxMSChart.ChartData = Nota

Indicamos que o gráfico devera ser plotado em cima do Array notas. Não consegui usar o DataSource do MSChart com meu BindingSource do .NET, muito provavelmente por incompatibilidade, então o workaround foi usar o ChartData como um array!


For i As Integer = 1 To AxMSChart.ColumnCount
    AxMSChart.Column = i
    AxMSChart.ColumnLabel = NumeroMatricula(i – 1)
Next

Bom, tivemos de fazer outro laço para preencher as legendas porque simplesmente o controle não aceitou quando tentei fazê-las no mesmo laço (pode ser mais um bug ou apenas ignorância minha).

Por enquanto é só, se você estava esquentando a cabeça com o VB.NET e o MSChart acho que isto pode ajudar um pouco.

Divirtam-se!

Texto de:
Alexandre Marques

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s