none
Graficar columnas de un DataGridView RRS feed

  • Pregunta

  • Buenas tardes comunidad, me encuentro realizando un programa y tengo la siguientes 2 duda.

    IDEA 1

    Dentro de este programa genero un DataGridView con varias columnas (20, exactamente) y quisiera saber si hay alguna manera de graficar con gráfica de lineas como lo hace el Excel... Por ejemplo:

    En este caso lo que deseo graficar es solo las columnas Y1o, Y2o, Y3o con respecto a la columna X


    Si se puede quisiera que me ayudara a ver como se grafíca, bien sea generando un reporte o una ventana. No se si se pueda con el control de Datos "Chart"

    IDEA 2

    Otra idea que tengo es poder exportar el DataGridView a Excel, ya pude exportarlo con el código que acá abajo esta, pero quisiera saber como se hace para solo exportar las Columnas X, Y1o, Y2o, Y3o. Es decir las comunas (1,2,3,4 -- Pues teniendo en cuenta que el DataGridView empieza a contar desde 0)

    Como se pueden dar cuenta tengo un botón "btnExportarExcel" este me guarda el Excel en el explorador de Windows. Como hago para que después de que le de guardar al Excel se abra inmediatamente luego de haberlo guardado. 

    Ó Hay la posibilidad de que con este código de Exportar_Excel me guarde en un archivo de Excel Dinámico, es decir que este archivo de Excel este fijo con la gráfica creada y que cada vez que se actualicen los datos pues por ende también se actualice la gráfica. Se que esto último es algo loco pero no se si se pueda.

    Aquí les comparto el código con el que cargo el DataGridView y de igual manera hago el método para exportarlo a Excel.

    Imports System.Data.OleDb
    Public Class RungeKutta
    
        Private Sub RungeKutta_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim pasoh, valorX, valorY1, valorY2, valorY3, NIteracciones
    
            pasoh = Double.Parse(InputBox("Digite el valor del paso 'h': ", "Método de Runge Kutta", "Valor de 'h'", 100, 100))
            NIteracciones = Integer.Parse(InputBox("Digite el numero de iteracciones para el programa:", "Método de  Runge Kutta", "Valor de 'N Iteracciones'", 100, 100))
            valorX = Double.Parse(InputBox("Digite la condición inicial de x: ", "Método de Runge Kutta", "Valor de 'x'", 100, 100))
            valorY1 = Double.Parse(InputBox("Digite la condición inicial de y'1: ", "Método de Runge Kutta", "Valor de 'y1'", 100, 100))
            valorY2 = Double.Parse(InputBox("Digite la condición inicial de y'2: ", "Método de Runge Kutta", "Valor de 'y2'", 100, 100))
            valorY3 = Double.Parse(InputBox("Digite la condición inicial de y'3: ", "Método de Runge Kutta", "Valor de 'y3'", 100, 100))
    
            Dim tabla As New List(Of Fila)
    
            'estableciendo el primero
            Dim primero As New Fila()
            With primero
                .n = 1
                .X = valorX
                .Y1o = valorY1
                .Y2o = valorY2
                .Y3o = valorY3
                .pasoH = pasoh
            End With
            tabla.Add(primero)
    
            'estableciendo resto
            For i As Integer = 1 To NIteracciones
                primero = New Fila(primero)
                tabla.Add(primero)
            Next
    
            DataGridView1.DataSource = tabla
            DataGridView1.Columns("X").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns(0).Width = 50
            DataGridView1.Columns("Y1o").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("Y2o").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("Y3o").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("K1Y1").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("K1Y2").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("K1Y3").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("K2Y1").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("K2Y2").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("K2Y3").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("K3Y1").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("K3Y2").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("K3Y3").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("K4Y1").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("K4Y2").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("K4Y3").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("Y1").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("Y2").DefaultCellStyle.Format = "N4"
            DataGridView1.Columns("Y3").DefaultCellStyle.Format = "N4"
    
        End Sub
    
        Public Sub Exportar_Excel(ByVal DataGridView1 As DataGridView, ByVal pth As String)
    
            Dim xlApp As Object = CreateObject("Excel.Application")
            'crear nueva hoja de excel
            Dim xlWB As Object = xlApp.WorkBooks.add
            Dim xlWS As Object = xlWB.WorkSheets(1)
    
            'exportamos las cabeceras de columnas
            For c As Integer = 0 To DataGridView1.ColumnCount - 1
                xlWS.cells(1, c + 1).value = DataGridView1.Columns(c).HeaderText
            Next
    
            For r As Integer = 0 To DataGridView1.RowCount - 1
                For c As Integer = 0 To DataGridView1.ColumnCount - 1
                    xlWS.cells(r + 2, c + 1).value = DataGridView1.Item(c, r).Value
                Next
            Next
    
            'Guardamos la hoja de Excel en la ruta especificada
            xlWB.saveas(pth)
            xlWS = Nothing
            xlWB = Nothing
            xlApp.quit()
            xlApp = Nothing
        End Sub
    
        Private Sub btnExportarExcel_Click(sender As Object, e As EventArgs) Handles btnExportarExcel.Click
            Dim save As New SaveFileDialog
            save.Filter = "Archivo Excel | *.xlsx"
            If save.ShowDialog = Windows.Forms.DialogResult.OK Then
                Exportar_Excel(Me.DataGridView1, save.FileName)
            End If
        End Sub
    End Class
    
    Public Class Fila
        Sub New()
            n = 0
            X = 0
            Y1o = 0
            Y2o = 0
            Y3o = 0
            pasoH = 0
        End Sub
        Sub New(anterior As Fila)
            pasoH = anterior.pasoH
            n = anterior.n + 1
            X = anterior.X + pasoH
            Y1o = anterior.Y1 'anterior.Y1o
            Y2o = anterior.Y2 'anterior.Y2o
            Y3o = anterior.Y3 'anterior.Y3o
        End Sub
        Sub New(vN As Integer, vX As Double, vY1 As Double, vY2 As Double, vY3 As Double, vPasoh As Double)
            n = vN
            X = vX
            Y1o = vY1
            Y2o = vY2
            Y3o = vY3
            pasoH = vPasoh
        End Sub
    
        Public Property n() As Integer
        Public Property X() As Double
        Public Property Y1o() As Double
        Public Property Y2o() As Double
        Public Property Y3o() As Double
        Public Property pasoH As Double
    
        'Funciónes a calcular: y′1 = 2.3y2 − 0.01y3 --- y′2 = −0.05y1 + y2 --- y′3 = y1 − 0.16y3
    
        'Para K1Y1, K1Y2 & K1Y3
        Public ReadOnly Property K1Y1 As Double
            Get
                Return 2.3 * Y2o - 0.01 * Y3o
            End Get
        End Property
        Public ReadOnly Property K1Y2 As Double
            Get
                Return -0.05 * Y1o + Y2o
            End Get
        End Property
        Public ReadOnly Property K1Y3 As Double
            Get
                Return Y1o - 0.16 * Y3o
            End Get
        End Property
    
        'Para K2Y1, K2Y2 & K2Y3
        Public ReadOnly Property K2Y1 As Double
            Get
                Return 2.3 * (Y2o + pasoH * K1Y2 / 2) - 0.01 * (Y3o + pasoH * K1Y3 / 2)
            End Get
        End Property
        Public ReadOnly Property K2Y2 As Double
            Get
                Return -0.05 * (Y1o + pasoH * K1Y1 / 2) + (Y2o + pasoH * K1Y2 / 2)
            End Get
        End Property
        Public ReadOnly Property K2Y3 As Double
            Get
                Return (Y1o + pasoH * K1Y1 / 2) - 0.16 * (Y3o + pasoH * K1Y3 / 2)
            End Get
        End Property
    
        'Para K3Y1, K3Y2 & K3Y3
        Public ReadOnly Property K3Y1 As Double
            Get
                Return 2.3 * (Y2o + pasoH * K2Y2 / 2) - 0.01 * (Y3o + pasoH * K2Y3 / 2)
            End Get
        End Property
        Public ReadOnly Property K3Y2 As Double
            Get
                Return -0.05 * (Y1o + pasoH * K2Y1 / 2) + (Y2o + pasoH * K2Y2 / 2)
            End Get
        End Property
        Public ReadOnly Property K3Y3 As Double
            Get
                Return (Y1o + pasoH * K2Y1 / 2) - 0.16 * (Y3o + pasoH * K2Y3 / 2)
            End Get
        End Property
    
        'Para K4Y1, K4Y2 & K4Y3
        Public ReadOnly Property K4Y1 As Double
            Get
                Return 2.3 * (Y2o + pasoH * K3Y2) - 0.01 * (Y3o + pasoH * K3Y3)
    
            End Get
        End Property
        Public ReadOnly Property K4Y2 As Double
            Get
                Return -0.05 * (Y1o + pasoH * K3Y1) + (Y2o + pasoH * K3Y2)
            End Get
        End Property
        Public ReadOnly Property K4Y3 As Double
            Get
                Return (Y1o + pasoH * K3Y1) - 0.16 * (Y3o + pasoH * K3Y3)
            End Get
        End Property
    
        'Para Y1, Y2 & Y3
        Public ReadOnly Property Y1 As Double
            Get
                Return Y1o + pasoH * (K1Y1 + 2 * K2Y1 + 2 * K3Y1 + K4Y1) / 6
            End Get
        End Property
        Public ReadOnly Property Y2 As Double
            Get
                Return Y2o + pasoH * (K1Y2 + 2 * K2Y2 + 2 * K3Y2 + K4Y2) / 6
            End Get
        End Property
        Public ReadOnly Property Y3 As Double
            Get
                Return Y3o + pasoH * (K1Y3 + 2 * K2Y3 + 2 * K3Y3 + K4Y3) / 6
            End Get
        End Property
    End Class
    

    Los únicos controles que agregue son el DataGridView y un Button, ( DataGridView1 -- btnExportarExcel) respectivamente.

    Espero me puedan ayudar, les agradecería mucho!!!

    martes, 13 de noviembre de 2018 19:51

Respuestas

  • Hola  Andrés10

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que nos encontramos realizando la revisión del inconveniente que presentas.

    Te daremos una respuesta a la brevedad posible.

    Gracias por usar los foros de MSDN.

    Pablo Rubio
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    • Marcado como respuesta Pablo Rubio lunes, 19 de noviembre de 2018 17:17
    martes, 13 de noviembre de 2018 22:15