Sunteți pe pagina 1din 7

Graficas Estadsticas en VB.

NET 2010 con instrucciones SQL



Para trabajar con graficas estadsticas en VB.NET 2010 y el objeto ChartControl, lo podemos realizar
utilizando:
Cuadros de texto, ingresando el nombre de la serie y los puntos o valores para la seria.
Listas, creando una lista para las series y los valores.
Vectores o Arrays, alimentando la grafica a travs de vectores que almacenan la informacin al igual
como lo haramos mediante listas.
Instrucciones SQL, crear una solicitud de datos mediante la instruccin Select-SQL, la cual la
ejecutamos mediante el objeto comando y almacenamos el resultado de registros en un DataReader, para
despus enlazar estos datos con la grafica a travs del mtodo DataBindTable. Caso de estudio # 2 para
esta publicacin.
Haciendo una compilacin de los anteriores para enlazarlos en la grafica a travs del mtodo
DataBindCrossTable, el cual solicita el origen de datos del que alimentara la grafica, el nombre del
campo usado para agrupar los datos de la serie, nombre del campo para los valores X, lista separada por
comas de nombres de los campos para los valores Y; y otras propiedades de puntos de datos que se
pueden enlazar.
Cmo funciona el objeto ChartControl, al presentar una grafica estadstica?
El objeto Chart Control est compuesto por una coleccin (tiene un comportamiento como los vectores o
array) de propiedades, mtodos y eventos que permiten la construccin del mismo, entre ellos tenemos:
1. ChartAreas: Es de tipo coleccin permite crear la zona donde se visualizara el grafico, esta se puede
dividir en ms de un rea para colocar graficas en cada una de ellas. En el rea del grafico se puede
configurar para mostrar en forma 3D o 2D mediante la propiedad Enable3DStyle.
2. Series: Es de tipo coleccin, cada serie tiene la propiedad ChartType, que determina el tipo de grafico
que estar contenido en un ChartArea, los tipos de grficos pueden ser, Pastel, Barras, Columnas,
Lneas, reas, Puntos y otros grficos que soporta el objeto ChartControl. Las series se pueden agrupar
en un solo ChartArea para crear una grafica comparativa en tipos de grafico (Barras, Columnas, Lneas,
reas y Puntos). No puede adjuntar dos series en una grafica de tipo Pastel.
3. Las series en su interior tiene una coleccin de propiedades llamada puntos (Point, tambin una
coleccin), estos son los valores que toma la grafica si es de columnas seria la altura que mostrara la
barra.
4. Titles: Es de tipo coleccin, que permite agregar el titulo a una grafica
Una coleccin tiene mtodos Add, Clear que permiten agregar y limpiar el contenido de un array o
vector (en nuestro caso de estudio las propiedades ChartAreas, Series, Point y Titleson de tipo
coleccion; por tanto tienen metodos Add y Clear)

Cmo enlazar un objeto ChartControl con un DataSet para crear una grafica?
El enlace de datos simple de una tabla a un control grfico se puede lograr utilizando el
mtodo Chart.DataBindTable (requiere que un esquema de tablas exista antes de hacer el enlace). Las
series y puntos se crean automticamente y se agregan al control grfico basado en el nmero de
columnas del origen de datos.
Para este ejemplo usaremos una tabla de nombre Empresas, creada en Access, en esta tabla se almacena
la informacin de una ficha para encuesta de empresas, y tiene la siguiente estructura:
Nombre de tabla: Empresas
Campo Tipo
IdEmpresa Autonum
Propietario Texto
Empresa Texto
Telefono Numero
Celular Numero
Direccion Texto
Correo Texto
Actividad Texto
Opcin de seleccin nica
Actividad Comercial
Cmo est constituida?
Est dispuesto a asociarse con otros?
Tiene acceso al sistema financiero?
Le han asesorado tcnicamente?
Conoce de canales de distribucin?
Constituido Texto
Asociacin Texto
Financiamiento Texto
Asesoria Texto
Distribucion Texto
Observaciones Texto
Turismo Si/No
Opcin de seleccin mltiple,
mediante CheckBox en el formulario
Caficultura Si/No
Agroindustria Si/No
Ganaderia Si/No
Artesanias Si/No
Horticultura Si/No
Pisicultura Si/No
Ecoturismo Si/No
Apiario Si/No
Floricultura Si/No
Otros Si/No
Ninguno Si/No

Programar las graficas estadsticas para las preguntas Cul es la actividad comercial de la empresa?,
Cmo est constituida la empresa?, Est dispuesto a asociarse con otras personas?, Tiene acceso al
sistema financiero Nacional?, Ha recibido asesora tcnica?, Tiene conocimiento sobre canales de
distribucin?; se debe escribir una instruccin SQL de resumen que obtiene el numero de respuestas de
esa pregunta (Select Actividad, count(Actividad) as Total from Empresas group by
Actividad), y se genera la fuente de datos para mostrar la grafica, este paso es igual para las dems
preguntas solo cambiando el nombre del campo.
Pero en las opciones de seleccin mltiple como lo es la pregunta En qu otras actividades comerciales
desea invertir?, aqu se debe contar el nmero de empresas que han marcado por cada una de las
opciones, en casos como estos que se quiere crear la grafica estadstica de Actividades comerciales a
invertir, se debe programar para alimentar el esquema de tablas en el DataSet de VB.NET, para
generar la grafica que muestre el nmero de empresas que piensan invertir en Turismo, Ecoturismo, etc..
Para tal fin comenzaremos por el formulario, las propiedades que deber modificar sern:
Propiedad Valor
Name frmGraficaporActividades
MinimizeBox False
StartPosition CenterScreen
Text Grafica de Actividades comerciales a
invertir
Al Formulario agregue el objeto Button, del Cuadro de Herramientas, seccin Controles comunes, y
cambie las siguientes propiedades:
Propiedad Valor
Name Cmdactualizar
Anchor Bottom, Right
Text Actualizar
La propiedad Anchor es para que el objeto al que se configura, mantenga la posicin al maximizar o
restaurar el formulario.

El tipo de grafica a mostrar es pastel, al generar la grafica se mostraran los valores de cada categora, el
objeto ChartControlcuenta con una propiedad dentro de las series para que los valores de la grafica se
muestren en porcentaje, pero la suma de este porcentaje no resulta en 100%, por tanto agregare un
cdigo que permita esa opcin, mientras tanto agregue un objeto CheckBoxdel Cuadro de
Herramientas, seccin Controles comunes, y modifique las siguientes propiedades:
Propiedad Valor
Name chkPorcentajes
Anchor Bottom, Right
Text Ver Porcentajes
Cuando la propiedad Checked de este objeto se encuentre activada (True), entonces la grafica mostrara
los porcentajes representativos de cada pieza del pastel, ahora agregue el objeto Chart del Cuadro de
Herramientas, seccin Datos, y modifique las propiedades:
Propiedad Valor
Name oGrafico
Anchor Top, Bottom, Left, Righ

Su formulario debe tener un aspecto como el de la siguiente imagen:


Ahora procederemos a configurar el conjunto de datos que alimentara la grafica, para esto abra
su DataSet, sino tiene uno haga el nuevo DataSet y le escribe el nombredsTablas, dentro del DataSet,
clic derecho en una zona limpia y selecciona Agregar/Table de Datos, al objeto nuevo que se ha creado
llmele EmpresasGrafico, cambiando la propiedad Name de la ventana de propiedades.
Luego haga clic derecho sobre la tabla creada y seleccionesAgregar/Columna, a la columna llmele
Categoria y su tipo de dato (DataType) ser System.String todo desde la ventana de propiedades,
despus de eso, haga clic derecho sobre la Columna Categoria y selecciona Agregar/Clave, se aparecer
una ventana en la cual deber cambiar algunos datos como se muestra en la imagen.

Una vez hecha la clave principal, agregue una nueva columna y le llama Total, con tipo de
dato System.Int16.

Si no se configura la clave principal, no se podr hacer uso del mtodo Find( ) del objeto DataRow

La siguiente imagen muestra como deber quedar su conjunto de datos dentro del DataSet.

Una vez configurado el formulario y la tabla dentro del conjunto de datos, procedemos a programar el
cdigo para crear la grafica, pero recuerde que siempre, para programar se debe tener un camino a seguir
para llegar a la solucin.

Cabe recordar que para generar las graficas donde la pregunta es seleccin nica (en las respuestas), se
realiza con la instruccin SQL-Select (Select Actividad, count(Actividad) as Total from
Empresas group by Actividad), y esta creara una tabla de informacin para la grafica donde muestra:
Actividad Total
Si ##
Pero para construir nuestra grafica de Actividades comerciales a invertir, nuestra tabla de datos deber
quedar formada de la siguiente forma:
Categoria Total
Turismo
##
Caficultura
##
Ganaderia
##
.
.
.
.
.
.
Para crear una tabla de informacin con los datos anteriores, usaremos la instruccin SQL-Select
(Select Turismo, count(Turismo) as Total from Empresas group by Turismo), y los datos
devueltos por esta instruccin se almacenaran en la tabla del DataSet, EmpresasGrafico, y luego
continuaremos de la misma forma solo que cambiando la actividad comercial, todo esto se puede hacer
manualmente, pero Cmo actualizar los datos del grafico cuando se agregue nueva informacin a la
tabla?, si se est construyendo una aplicacin, se debe de programar todo el cdigo necesario para
construir la grafica, y para ello seguiremos un procedimiento o secuencia de pasos que nos ayudaran a
formar nuestra grafica estadstica.
1. Realizar un array o vector donde se almacenen todos los rubros (Turismo, Caficultura, )
2. Crear un ciclo repetitivo que recorra el array o vector de los rubros.
2.1. Crear una instruccin SQL-Select que obtenga los datos de cada uno de los rubros por separado.
2.2. Alimentar los datos del DataSet con los datos devueltos por la instruccin SQL-Select de cada rubro.
3. Generar la grafica.

Procedimiento:
Haga clic derecho sobre el formulario y seleccione la opcin Ver Cdigo, y antes del
comando Public ClassfrmGraficaporActividades, presione la tecla ENTER y escriba
Imports System.Data.OleDb
Esta lnea de cdigo es para adjuntar referencias a la librera de clases OleDb, la cual nos permite objetos
para trabajar con tablas de Access.

Durante el procedimiento haremos uso del Objeto DataRow, el cual representa una fila primaria de una
tabla, a la cual se le pueden asignar valores para agregar o actualizar en la tabla. Un DataRow tiene una
estructura de la tabla, en nuestro caso de la tabla EmpresasGrafico, y se representa de la siguiente forma:
Categoria Total
Informacin que guarda
el DataRow


Luego presione las teclas Shift + F7, para ir a la parte grafica del formulario, y estando aqu, haga doble
clic sobre el botn actualizar y escriba el siguiente cdigo:

'Crear la cadena de conexion y abrir una conexion de datos con la BD Empresas
Dim Cadena As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\IIIBTC_2012\Registro_de_Empresas.accdb"
Dim oConexion As New OleDbConnection(Cadena)
oConexion.Open()

'Limpiar el contenido del DataSet para la nueva informacion
DsTablas.EmpresasGrafico.Clear()

'Paso 1, Array con todos los rubros
Dim aRubros As String() =
{"Turismo", "Caficultura", "Ganaderia", "Artesanias", "Horticultura", "Pisicultura", "Ecoturismo","A
piario", "Floricultura", "Otros", "Ninguno"}

'Variable para estar cambiando la instruccin SQL
Dim cSQL As String = ""
'Paso 2, Ciclo repetitivo que recorre el array
For i As Integer = 0 To aRubros.Length - 1
'Paso 2.1, Crear un Select para obtener los datos segun cada rubro
cSQL = "Select " & aRubros(i) & ", count(" & aRubros(i) & ") as Total from Empresas where " &
aRubros(i) & "= true group by " & aRubros(i)

Dim oComando As New OleDbCommand(cSQL, oConexion)
Dim lector As OleDbDataReader = oComando.ExecuteReader
'El objeto DataRow es usado para representar una fila primaria, en nuestro caso con la
'estructura de la tabla EmpresasGrafico, para las columnas Categoria y Total
Dim Fila As DataRow = DsTablas.EmpresasGrafico.NewRow
If lector.Read Then
If lector("Total") <> 0 Then
'Asignar los valores a cada campo, el del Rubro y # Total para ese rubro
Fila("Categoria") = aRubros(i)
Fila("Total") = lector("Total")
'Paso 2.2 Alimentar el DataSet con los datos de cada rubro
DsTablas.EmpresasGrafico.Rows.Add(Fila)
'Guardar los valores y convertirlos a porcentajes si as se desea
Valores(i) = lector("Total")
'Esta variable fue creada como array despus de la declaracin Public Class
End If 'End if para la condicin lector(Total)<> 0
End If 'End if para la condicin lector.Read()
Next

'Aplicar cambios al DataSet
DsTablas.EmpresasGrafico.AcceptChanges()

'Cerrar conexin de datos
oConexion.Close()


'Limpiar el contenido del grafico antes de enlazar con los nuevos datos
oGrafico.Series.Clear()
oGrafico.Titles.Clear()

'Activar las opciones para visualizar la grafica en 3D
oGrafico.ChartAreas(0).Area3DStyle.Enable3D = True

'Agregar el titulo de la grafica
oGrafico.Titles.Add("Otras actividades comerciales a invertir")

'Cambiar el tipo de letra para la grafica
oGrafico.Titles(0).Font = New Font("Tahoma", 15, FontStyle.Bold)

'Cambiar opciones de rotacin y profundidad de la grafica en 3D
oGrafico.ChartAreas(0).Area3DStyle.Rotation = 20
oGrafico.ChartAreas(0).Area3DStyle.PointDepth = 75
oGrafico.ChartAreas(0).Area3DStyle.PointGapDepth = 35

'Paso 3, Generar la grafica, enlazando a travs del mtodo DataBindTable
oGrafico.DataBindTable(EmpresasGraficoBindingSource, "Categoria")
'EmpresasGraficoBindingSource proporciona el enlace a de datos a la grafica
' Categoria, permite dar el nombre a cada pieza del pastel
'adems que estas categoras son mostradas como rtulos en la leyenda de la grafica

'Cambiar el tipo de grafico a Pastel
oGrafico.Series(0).ChartType = DataVisualization.Charting.SeriesChartType.Pie

'Mostrar como etiqueta de datos, los valores totales que alimentan la grafica
oGrafico.Series(0).IsValueShownAsLabel = True

La declaracin del Array Valores, esta creada de la siguiente forma, y usted la deber ubicar en el lugar
que le corresponde como se muestra en la imagen


Creo que explicar cada lnea de cdigo del botn Actualizar seria redundante, debido a que rotule cada
una Asi que solo explicara la

Como el usuario puede pedir que se muestren los porcentajes que representa cada pieza del pastel, se
agrego el CheckBox Ver Porcentajes para tal fin, vuelva a la parte grafica del formulario (Shift + F7) y
haga doble clic sobre el CheckBox Ver Porcentajes, y en el editor de cdigo escriba las siguientes
lneas:

Dim aRubros As String() =
{"Turismo", "Caficultura", "Ganaderia", "Artesanias", "Horticultura", "Pisicultura", "Ecoturismo","A
piario", "Floricultura", "Otros", "Ninguno"}

Dim Sumatoria As Integer = 0
'Obtener 1ro una sumatoria de todos los valores visualizados en la grafica
For i As Integer = 0 To Valores.Count - 1
Sumatoria += Valores(i)
Next
If chkPocentajes.Checked = True Then
'Se trabajara con la actualizacion de los totales en el dataset
For i As Integer = 0 To aRubros.Count - 1
Dim Fila As DataRow
'Se buscara cada uno de los rubros para obtener el porcentaje que representa
' en la grafica, para eso se hizo la clave principal Categoria
Fila = DsTablas.EmpresasGrafico.Rows.Find(aRubros(i))
If Fila IsNot Nothing Then
'Si se ha encontrado la categoria, entonces se calcula el porcentaje
Fila("Total") = (Int(Fila("Total")) / Sumatoria) * 100
End If
Next
oGrafico.Series.Clear()
oGrafico.Titles.Clear()
oGrafico.ChartAreas(0).Area3DStyle.Enable3D = True
oGrafico.Titles.Add("Otras actividades comerciales a invertir, valores en porcentajes")
oGrafico.Titles(0).Font = New Font("Tahoma", 15, FontStyle.Bold)
oGrafico.ChartAreas(0).Area3DStyle.Rotation = 20
oGrafico.ChartAreas(0).Area3DStyle.PointDepth = 75
oGrafico.ChartAreas(0).Area3DStyle.PointGapDepth = 35
DsTablas.EmpresasGrafico.AcceptChanges()
oGrafico.DataBindTable(EmpresasGraficoBindingSource, "Categoria")
oGrafico.Series(0).ChartType = DataVisualization.Charting.SeriesChartType.Pie
oGrafico.Series(0).IsValueShownAsLabel = True
Else
Call cmdActualizar_Click(Nothing, Nothing)
'Si el usuario no quiere porcentajes, se hace el llamado del evento clic del botn Actualizar
End If

Ahora si, usted puede compilar su formulario presionando la combinacion de teclas Ctrl +
F5, siempre utilice esta combinacion de teclas para compilar y ejecutar su formulario, ya
que si solo presiona F5 su formulario no sera compilado y puede que se esten produciendo
errores de los que no se dara cuenta.

Ademas recuerde estas lineas de codigo pueden variar, es importante que usted sepa lo que
est haciendo o tratando de hacer con cada una de ellas, ya que ningun programa es igual
con otro, al igual que las soluciones con las operaciones matemticas, existen muchos
caminos para llegar a la solucion, solo es que usted elija el indicado.

S-ar putea să vă placă și