Genesis Vargas J

Crear reportes gráficos enlazado a una base de datos (ACCESS) en Visual Basic .NET

Comparte:

Hola amigos, en esta ocasión les mostraré como sumar filas de una columna de

Hola amigos, en esta ocasión les explicaré como hacer un programa que genere reportes estadísticos en gráficos. La información para realizar los reportes la vamos a tomar de nuestra base de datos y tambien la mostraremos en un datagridview.

Para realizar este ejemplo debemos crear un proyecto de windows forms en visual studio y en el formulario que nos aprecerá vamos a diseñar una interfaz que debería quedar así: (Necesitamos: 1 datagridview, 1 chart y 2 buttons)

El datagridview debe tener en la propiedad RowsHeadersVisible: false, paso seguido haces doble click en el boton BtnCargarDatagridview: alli vas a llamar al procedimiento que carga la grilla, luego haces doble click en el boton BtnCargarGrafico: alli vas a llamar al procedimiento que cargar la gráfica . Los procedimientos que vamos a utilizar se llaman: CrearGrilla el cual recibe como parametro el datagridview y CrearGrafico y recibe como parametro el chart.

Seguidamente vamos a agregar la referencia al proyecto para trabajar con los graficos, la cual se llama: System.Windows.Forms.DataVisualization.Charting.

Ahora escribímos los dos procedimientos mencionados anteriormente y el codigo quedaría así:

FRMREPORTE.VB

Imports System.Windows.Forms.DataVisualization.Charting
Imports System.Data.OleDb
Public Class FrmReporte

    Dim con As New OleDbConnection("Data Source=" + Application.StartupPath & "\Lenguajes.accdb; Provider=Microsoft.ACE.OLEDB.12.0")

    Sub CrearGrilla(ByVal dgv As DataGridView)
        con.Open()
        Dim cmd As New OleDbCommand("SELECT Nombre AS Lenguajes, CantidadUsuarios FROM LenguajeProgramacion", con)
        Dim da = New OleDbDataAdapter(cmd)
        Dim dt As New DataTable
        da.Fill(dt)
        dgv.DataSource = dt
        con.Close()
    End Sub

    Sub CrearGrafico(ByVal graf As Chart)
        If graf.Series("Uso de Lenguajes").Points.Count > 0 Then
            graf.Series("Uso de Lenguajes").Points.Clear()
        End If
        con.Open()
        Dim cmd As New OleDbCommand("SELECT Nombre AS Lenguajes, CantidadUsuarios FROM LenguajeProgramacion", con)
        Dim dr As OleDbDataReader = cmd.ExecuteReader
        While dr.Read
            graf.Series("Uso de Lenguajes").Points.AddXY(dr(0).ToString, CInt(dr(1).ToString))
        End While
        dr.Close()
        con.Close()
    End Sub

    Private Sub BtnCargarGrafico_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCargarGrafico.Click
        CrearGrafico(ChartReporte)
    End Sub

    Private Sub BtnCargaDatagridview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCargaDatagridview.Click
        CrearGrilla(DgvReporte)
    End Sub

End Class 

Como vemos el código el procedimiento CrearGrafico verifica si la serie tiene puntos y si es asi los borra para luego agregar los que encontro y asi evitar duplicidad, después hace la consulta normal a la base de datos y utiliza un datareader para posteriormente usarlo y enlazarlo al gráfico de tal manera que mientras el datreader este leyendo la info de la base de datos que este encontrando a su vez a la serie del chart se le agregan los puntos del lado izquierdo la columna 0 o la columna Nombre del datareader y en el lado derecho la columna 1 o la columna CantidadUsuarios; cabe decir que como la ultima es un numero lo convertimos en entero con la funcion CInt.Por último el procedimiento CargarGrilla hace la conexion normal y la consulta y la guarda en un datatble para luego asignarle ese mismo datatble al datasoruce del datagridview.

Al final el programa se vería asi en tiempo de ejecución haciendo click en los dos botones:

Bueno eso es todo espero que les sirva mucho para aprender y practicar. Les dejo una carpeta comprimida para que descarguen el ejemplo.

Comentarios


genesis vargas

Soy Genesis Vargas Jiménez, autor de éste blog. Me gusta desarrollar software en todas las plataformas (web, móvil y desktop) y compartir conocimiento para ayudar a muchas personas.

Desde el 2015 soy MVP Microsoft en Visual Studio y tecnologías de desarrollo, reconocimiento que me enorgullece mucho.

MVP Genesis Vargas J

A PHP Error was encountered

Severity: Core Warning

Message: Module 'timezonedb' already loaded

Filename: Unknown

Line Number: 0

Backtrace: