Ya que terminamos el primer paso en le proyecto de la encuesta pasaremos al Segundo Paso que es la creación de las gráficas estadísticas para cada una de las preguntas de nuestra encuesta.
Para el primer tipo de gráficas estadísticas haremos uso del objeto Data Row el cual nos permitirá agregar una fila a una tabla nueva para almacenar cada una de la lectura de las opciones que hagamos mediante un array. Usaremos el datarow porque en la encuesta tenemos preguntas de selección a través de checkbox y así de esa manera podremos hacer un array en el cual estén contenidos cada una de esas opciones , para después almacenarlas en una tabla nueva.
Como primer paso para nuestra realización de la gráfica lo que haremos es abrir nuestro dsTablas y crear un Tabla nueva a la cual llamaremos Grafico1 y le agregaremos los campos Servicio y Total, Quedándonos de la siguiente manera:
A esta tabla nueva le modificaremos las siguientes propiedades para que a la hora de almacenar los datos no tengamos ningún problema.
Tabla Grafico1
|
||
Campo
|
Propiedad
|
Valor
|
Servicio (Campo
llave)
|
DataType
|
System.String
|
Name
|
Servicio
|
|
Total
|
DataType
|
System.Int16
|
Name
|
Total
|
Una vez hecho esto Agregamos un nuevo Formulario y le llamamos Servicios, una vez creado Seleccionamos de la barra de herramientas en la sección Datos el Objeto ChartControl el cual nos ayudara a mostrar nuestra gráfica. Lo pegamos en el Formulario, lo acomodamos y cambiamos las siguientes propiedades para el Formulario como para el objeto ChartControl:
Formulario
|
|
Propiedad
|
Valor
|
Text
|
Servicios Cable,
Internet, Telefonia
|
StratPosition
|
CenterScreen
|
ChartControl
|
|
Name
|
Ograf
|
Palette
|
SeaGreen
|
Anchor
|
Top, Bottom, Left,
Right
|
Una Vez Hecho todos estos cambios pasamos a programar nuestro gráfico. La programacion de este la aremos en el evento Load del Formulario
Código:
Imports Encuesta.Entorno
Imports System.Data.OleDb
Public Class Servicios
'Declaramos una variable para que guarde cada uno de los
valores del total
Dim Val As Integer() = {0, 0, 0}
Private Sub Servicios_Load(ByVal
sender As System.Object,
ByVal e As
System.EventArgs) Handles
MyBase.Load
'Llamamos nuestro dataset y limpiamos el
contenido de nuestra tabla
DsTablas.Grafico1.Clear()
'Declaramos el array que tendra como valor los campos de
las opciones que se leeran
Dim array As String() = {"Cable",
"Internet", "Telefonia"}
'Hacemos un ciclo repetitivo para que recorra
nuestro array el cual empesara desde cero contando cada una de las opciones del
array
For i As Integer = 0 To
array.Count - 1
'Creamos nuestra instruccion SQl la cual es
la siguiente
Dim CSQl As String = " Select
" & array(i) & ",
count(" & array(i) & ") as
Total from Encuesta where " & array(i) & _
"
= true group by " & array(i)
'Abrimos nuestra conexion
Datos.Conectar() '
'Declaramos la variable comand la cual ejecutara nuestra
instruccion sql mediante el objeto OledbCommand enviandole junto con el la
instruccion mas la conexion
Dim comando As New OleDbCommand(CSQl,
Datos.oConexion)
'Creamos otra variable para la lectura de
nuestros datos por medio de el objeto OledbDatareader enviandole junto con el
la variable ejecutando la instruccion mas executereader que es el que ejecutara
nuestra lectura
Dim lec As OleDbDataReader = comando.ExecuteReader
'Declaramos la variable fila la cual guardara
la informacion y creara una nueva fila mediante el objeto Datarow, la cual se
agregara en la tabla grafico1
Dim fila As DataRow = DsTablas.Grafico1.NewRow
'Verificacion de la lectura de los datos para esto
crearemos una condicion, si el lector fue leido entonces
If lec.Read Then
'La fila que sea igual al servicio guardara el
nombre del primer campo leido en el array
fila("Servicio") = array(i)
'La fila que sea igual al total sera igual al
lector de los datos contados en la isntruccion
fila("Total")
= lec("Total")
'Para el porcentaje, los valores contenidos en
el ciclo seran iguales a los datos recuperados del campo total en la
instruccion
Val(i) = lec("Total")
'Agragamos la fila a la tabla grafico1
mediante la propiedad rows de objeto datarow y el metodo add
DsTablas.Grafico1.Rows.Add(fila)
End If
'una vez terminada la condicion se cierra la concexion y
finaliza el ciclo
Datos.oConexion.Close()
Next
' Porcentaje
'Hacemos nuevamente nuestro array
Dim array2 As String() = {"Cable",
"Telefonia", "Internet"}
'Declaramos la variable sumaval con valor
igual a cero ya que esta es la que ira sumando cada uno de los valores
encontrados de los campos en el array
Dim sumaval As Integer = 0
' Crear ciclo repetitivo para la sumatoria de los valores
del contenidos en el total
For i As Integer = 0 To
Val.Count - 1
sumaval += Val(i)
Next
'Ciclo para el conteo de las cantidades de los servicios
For i As Integer = 0 To
array2.Count - 1
'Creamos una nueva fila temporal para guardar
los datos
Dim fila As DataRow
'Buscamos el valor del array2 en el grafico1 por medio del
metodo find y dividira ese valor entre el valor de la suma de los valores y los
multiplicara por 100
fila
= DsTablas.Grafico1.Rows.Find(array2(i))
If
fila IsNot Nothing
Then
fila("Total")
= (Int(fila("Total")) / sumaval) *
100
End If
Next
' ingreso de informacion al grafico
'verificacion de informacion dentro de la tabla para ser
mostrados
If DsTablas.Grafico1.Count > -1 Then
'Limpiamos las series del grafico
ograf.Series.Clear()
'Al igual que los titulos de el
ograf.Titles.Clear()
'Activamos el area 3D del grafico
ograf.ChartAreas(0).Area3DStyle.Enable3D = True
'Agregamos un nuevo titulo
ograf.Titles.Add("Porcentaje de la
Cantidad de personas que obtienen los diferentes servicios")
'Establecemos por medio de la propiedad font el estilo de
la letra el tamaño y la espesificacion del estilo
ograf.Titles(0).Font
= New Font("Cambria", 14, FontStyle.Underline)
'enlace de informacion en el Grafico Pormedio
del DAtabindTable
ograf.DataBindTable(Grafico1BindingSource, "Servicio")
'Establecemos el tipo de grafico de deseamos por medio de
la propiedad Chartype y el datavisualization
ograf.Series(0).ChartType
= DataVisualization.Charting.SeriesChartType.Pie
'Luego indicamos que el valor de punto de
datos sea mostrado atraves del IsValueShownLabel
ograf.Series(0).IsValueShownAsLabel = True
Else
' y si no se encontro nada pues enviar un msj que diga que
no se genero porque no hay datos contenidos para mostrarla
MsgBox("No se ha generado la grafica,
porque no se encontro informacion para crear la mismas", MsgBoxStyle.Information, "Sin
Datos")
End If
'Finalmente le damos aceptar cambios a nuestros DataSet
DsTablas.AcceptChanges()
End Sub
End
Class
Ya Terminado nuestra primer gráfica haremos lo mismo para la demás gráficas siguientes, en las cuales los métodos de captura de la información sean mediante un Checkbox
Para nuestro segundo tipo de gráfica haremos lo siguiente :
Tanto como en el formulario como en el objeto ChartControl se harán los mismos pasos que en el primero con excepción de la tabla nueva dentro del dataset ya que no haremos uso del Datarow, siempre lo programaremos en el evento Load del formulario lo único que cambiara en esta gráfica es su código el cual quedará de la siguiente forma:
Código:
' importamos los elementos del entorno
como asi mismo los de el olbjeto Oledb
Imports
Encuesta.Entorno
Imports
System.Data.OleDb
Public
Class Servicio
Private Sub Servicio_Load(ByVal
sender As System.Object,
ByVal e As System.EventArgs) Handles
MyBase.Load
'Limpiamos las series del Grafico
ografico.Series.Clear()
' Limpiamos los titulos
ografico.Titles.Clear()
'Activamos las areas 3D de las graficas
ografico.ChartAreas(0).Area3DStyle.Enable3D = True
'Creamos la instruccion Sql La cual seleccionara un campo
con informacion que fue ingresada desde un combobox, se hará un conteo de cada
una de ellas y se almacenara en un nuevo campo ordenados por el campo
seleccionado
Dim cSql As String = " Select
Servicio, count(Servicio) as Tot from Encuesta group by Servicio"
'Abrimos nuestra conexion
Datos.Conectar()
'ejecutamos nuestra instruccion por medio del objeto
command
Dim comando As New OleDbCommand(cSql,
Datos.oConexion)
'Hacemos una lectura de los datros por medio
del objeto DataReader
Dim lec As OleDbDataReader = comando.ExecuteReader()
'Enlazamos nuestro grafico por medio del
databindTable la cual esta vez envez de llamar al bindigSource llamaremos a la
variable del lector de los datos mas el campo del cual se obtuvieron lso datos
ografico.DataBindTable(lec, "Servicio")
'Agregamos un nuevo titulo para la grafica
ografico.Titles.Add("Nùmero de las
personas que poseen servicios")
'Configuramos el tipo del letra al igual que el tamaño
junto con el estilo
ografico.Titles(0).Font
= New Font("Cambria", 14, FontStyle.Underline)
'Visualizamos la grafica de deseamos
ografico.Series(0).ChartType = DataVisualization.Charting.SeriesChartType.Pie
'y mostramos el valor del punto de la etiqueta.
ografico.Series(0).IsValueShownAsLabel
= True
End Sub
End Class
Una vez finalizado podemos crear las gráficas que hacen falta con las cuales en ellas se contenga información agregada a través de un combobox.
Para el llamado de las gráficas desde el primer formulario habíamos creado Splitbutton al cual iremos a agregar información la cual al finalizar nos quedará de esta manera:
Una vez ingresada la información a cada una de las gráficas realizada solo nos queda hacer los llamados a las gráficas a través del método ShowDialog(). Hacemos doble click en cada una de ellas y escribimos unas pequeñas lineas de código asl cuales son:
el nombre del formulario mas el método ShowDialog()
Servicio.ShowDialog()
Ya realizado cada uno de los pasos obtendremos los diferentes resultados como estos:
No hay comentarios:
Publicar un comentario