domingo, 15 de abril de 2012

Segundo Paso: Creación de las diferentes gráficas

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