none
Multiplicar dos columnas de un DataGridView y sumar los resulatdos para poner el total en un TextBox RRS feed

  • Pregunta

  • Buenas Noches

    Acudo de nuevo a ustedes con una nueva duda....

    Tengo un DataGridView que lleno con datos de una tabla de excel, son 2 columnas con 100 datos cada una.... Mi intensión es multiplicar los datos de ambas columnas fila por fila y después esos resultados que obtuve sumarlos y ponerlos en un TextBox...

    Lo complicado aquí es que NO quiero poner los resultados de la multiplicación en una tercer columna, sino realizar los procesos juntos y obtener solo el resultado que deseo poner el el TextBox.

    Espero habaerme explicado bien y que me puedan ayudar de verdad se los agradecería demasiado

    miércoles, 16 de marzo de 2016 3:31

Respuestas

  • Hola Sofi, creo que no es tan difícil, solo tienes que recorrer el datagridview e ir multiplicando las columnas que deseas y los resultados irlos sumando:

     Dim total As Integer
            For Each row As DataGridViewRow In DataGridView1.Rows
                total = (Convert.ToInt32(row.Cells(1).Value) * Convert.ToInt32(row.Cells(2).Value)) + total
            Next
            TextBox1.Text = total

    Espero te sirva, solo no vi que especificaras los tipos de datos que usas en las columnas para hacer las conversiones necesarias e igual si algunas celdas tienen valores nulos, ya que si no lo manejas bien te puede marcar error.

    No se te olvide especificar el indice de tu columna o nombre de acuerdo a tu datagridview.

    Saludos.

    • Editado FranNovato miércoles, 16 de marzo de 2016 4:23
    • Marcado como respuesta Sofi Rivera miércoles, 16 de marzo de 2016 14:36
    miércoles, 16 de marzo de 2016 4:06
  • Hola:
    Para el ejemplo he creado un fichero Excel cuya imagen es:

    En un Form con 1 DataGridView y 1 Label, copia y pega el siguiente codigo

    Option Strict On
    Option Explicit On
    Imports System.Data.OleDb

    Public Class Form1

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Dim lsCadConexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\TU_CARPETA\TU_EXCEL.XLSX;Extended Properties='Excel 12.0 Xml;IMEX=1;HDR=Yes'"
            Dim lsQuery As String = "Select ID, IMPORTE_1, IMPORTE_2, (IMPORTE_1*IMPORTE_2) As PRODUCTO From [Hoja1$]"
            Dim loDataTable As New DataTable
            Try
                Using loConexion As New OleDbConnection(lsCadConexion)
                    Using loDataAdapter As New OleDbDataAdapter(lsQuery, loConexion)
                        'Cargar el Datatable con el fichero XLSX
                        loDataAdapter.Fill(loDataTable)
                        Me.DataGridView1.DataSource = loDataTable
                    End Using
                End Using
            Catch ex As Exception
                Me.Cursor = Cursors.Default
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Dim loSuma As Object = loDataTable.Compute("SUM(PRODUCTO)", Nothing)
            Me.Label1.Text = loSuma.ToString
        End Sub
    End Class


    El resultado es el siguiente


    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta Sofi Rivera miércoles, 16 de marzo de 2016 14:36
    miércoles, 16 de marzo de 2016 9:20

Todas las respuestas

  • Hola Sofi, creo que no es tan difícil, solo tienes que recorrer el datagridview e ir multiplicando las columnas que deseas y los resultados irlos sumando:

     Dim total As Integer
            For Each row As DataGridViewRow In DataGridView1.Rows
                total = (Convert.ToInt32(row.Cells(1).Value) * Convert.ToInt32(row.Cells(2).Value)) + total
            Next
            TextBox1.Text = total

    Espero te sirva, solo no vi que especificaras los tipos de datos que usas en las columnas para hacer las conversiones necesarias e igual si algunas celdas tienen valores nulos, ya que si no lo manejas bien te puede marcar error.

    No se te olvide especificar el indice de tu columna o nombre de acuerdo a tu datagridview.

    Saludos.

    • Editado FranNovato miércoles, 16 de marzo de 2016 4:23
    • Marcado como respuesta Sofi Rivera miércoles, 16 de marzo de 2016 14:36
    miércoles, 16 de marzo de 2016 4:06
  • Hola:
    Para el ejemplo he creado un fichero Excel cuya imagen es:

    En un Form con 1 DataGridView y 1 Label, copia y pega el siguiente codigo

    Option Strict On
    Option Explicit On
    Imports System.Data.OleDb

    Public Class Form1

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Dim lsCadConexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\TU_CARPETA\TU_EXCEL.XLSX;Extended Properties='Excel 12.0 Xml;IMEX=1;HDR=Yes'"
            Dim lsQuery As String = "Select ID, IMPORTE_1, IMPORTE_2, (IMPORTE_1*IMPORTE_2) As PRODUCTO From [Hoja1$]"
            Dim loDataTable As New DataTable
            Try
                Using loConexion As New OleDbConnection(lsCadConexion)
                    Using loDataAdapter As New OleDbDataAdapter(lsQuery, loConexion)
                        'Cargar el Datatable con el fichero XLSX
                        loDataAdapter.Fill(loDataTable)
                        Me.DataGridView1.DataSource = loDataTable
                    End Using
                End Using
            Catch ex As Exception
                Me.Cursor = Cursors.Default
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Dim loSuma As Object = loDataTable.Compute("SUM(PRODUCTO)", Nothing)
            Me.Label1.Text = loSuma.ToString
        End Sub
    End Class


    El resultado es el siguiente


    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta Sofi Rivera miércoles, 16 de marzo de 2016 14:36
    miércoles, 16 de marzo de 2016 9:20