none
Restar desde un datagrid a otro

    Pregunta

  • Hola,

    Tengo un datagridview donde voy agregando los productos de una venta.

    Tengo un botón "Quitar producto" de que en caso de que el producto seleccionado para una venta se desee quitar de la misma , se agregue el producto con sus respectivas cantidades y precio unitario en un datagrid donde esta la lista de productos.

    Lo que quiero es saber como puedo programar ese botón.

    Lo único que tengo en el botón es esto que se encarga de hacer algunas restas.

    De la base de datos no quiero que modifique nada.

    Como continuo lo pude hacer hasta ahí.

    Private Sub Button10_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
            Dim Row As DataGridViewRow = DataGridView2.CurrentRow
    
            If Row IsNot Nothing Then
                Dim cantidad = Convert.ToInt32(Row.Cells("Column2").Value)
                Dim producto = Convert.ToString(Row.Cells("Column1").Value)
    
                Label14.Text -= Convert.ToInt32(Row.Cells("Column2").Value)
                txttotal.Text -= Convert.ToDecimal(Row.Cells("Column3").Value)
                txtsubtotal.Text -= Convert.ToDecimal(Row.Cells("Column3").Value)
                DataGridView2.Rows.Remove(Row)
            End If
    
            'Aca selecciona el producto de la lista donde estan los mismos, acloro los productos no tiene un mismo nombre
    
            'declaraos las variables que queremos que contengan los valores de la columna
            Dim Nombre As String
            For Each rows As DataGridViewRow In Me.DataGridView1.Rows
                Nombre = Row.Cells(0).Value
            Next
    
        End Sub


    lunes, 5 de diciembre de 2016 13:30

Respuestas

  • GastoPerey,

    De acuerdo, intenta hacer lo siguiente:

    Private Sub btnQuitarFila_Click(sender As Object, e As EventArgs) Handles btnQuitarFila.Click
    
            'Obtener una referencia a la fila actualmente seleccionada
            Dim Fila As DataGridViewRow = dgvVentas.CurrentRow
    
            If Fila IsNot Nothing Then 'Si existe una referencia válida
    
                'Obtener los valores de la fila a quitar
                Dim Producto As String = CStr(Fila.Cells("Producto").Value)
                Dim Cantidad As Int32 = CInt(Fila.Cells("Cantidad").Value)
    
                'Quitar la fila
                dgvVentas.Rows.Remove(Fila)
    
                'Encontrar la fila según el producto que se ha quitado
                Dim FilaActualizar As DataGridViewRow =
                    dgvProductos.Rows.Cast(Of DataGridViewRow)().
                    Where(Function(r) Convert.ToString(r.Cells("ColProd").Value) = Producto).
                    FirstOrDefault()
    
                If FilaActualizar IsNot Nothing Then 'Acumular la cantidad
                    FilaActualizar.Cells("ColCant").Value += Cantidad
                End If
            End If
        End Sub


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Joyce_ACModerator lunes, 5 de diciembre de 2016 18:25
    • Marcado como respuesta Federico32113 martes, 6 de diciembre de 2016 19:01
    lunes, 5 de diciembre de 2016 17:38

Todas las respuestas

  • GastoPerey,

    Debes dar mayor detalle al caso.

    1. ¿El caso es agregar una nueva fila a la grilla donde se encuentran los productos? Si es así, ¿que columnas son las que se agregan?
    2. ¿La fila ya existe en la tabla productos y sólo se debe de actualizar? ¿cuál es la referencia entre las filas?

    Cuanto mayor detalle des al caso, obtendrás respuestas puntuales y -en el mejor de los casos- inmediatas. 


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 5 de diciembre de 2016 16:40
  • 1- No, no quiero agregar una nueva fila, solamente agregar el valor de cantidad de stock que estaba en el datagrid de la venta al datagrid donde están los productos.

    Por ejemplo el producto1 con 2 unidades esta en el datagrid de ventas quiero poder quitar y agregar la cantidad de productos que estaban para a venta al datagrid donde están el producto 1 con una unidad en stock, quedando el producto1 con 3 unidades.

    2-Si el producto ya esta en el datagrid donde están todos los productos.

    Lo que puede hacer es esto; acá capturo el nombre del producto y la cantidad para tratar de quitar del datagrid de ventas para agregarlo en el datagrid donde están todos los productos actualizando solamente la cantidad de stock.

     If Row IsNot Nothing Then
                Dim cantidad = Convert.ToInt32(Row.Cells("Column2").Value)
                Dim producto = Convert.ToString(Row.Cells("Column1").Value)
    
            End If

    Acá trato de capturar el nombre donde voy a agregar la cantidad de stock pero no estoy seguro de si es así.

    Dim Nombre As String
            For Each rows As DataGridViewRow In Me.DataGridView1.Rows
                Nombre = Row.Cells(0).Value
            Next



    lunes, 5 de diciembre de 2016 17:08
  • GastoPerey,

    De acuerdo, intenta hacer lo siguiente:

    Private Sub btnQuitarFila_Click(sender As Object, e As EventArgs) Handles btnQuitarFila.Click
    
            'Obtener una referencia a la fila actualmente seleccionada
            Dim Fila As DataGridViewRow = dgvVentas.CurrentRow
    
            If Fila IsNot Nothing Then 'Si existe una referencia válida
    
                'Obtener los valores de la fila a quitar
                Dim Producto As String = CStr(Fila.Cells("Producto").Value)
                Dim Cantidad As Int32 = CInt(Fila.Cells("Cantidad").Value)
    
                'Quitar la fila
                dgvVentas.Rows.Remove(Fila)
    
                'Encontrar la fila según el producto que se ha quitado
                Dim FilaActualizar As DataGridViewRow =
                    dgvProductos.Rows.Cast(Of DataGridViewRow)().
                    Where(Function(r) Convert.ToString(r.Cells("ColProd").Value) = Producto).
                    FirstOrDefault()
    
                If FilaActualizar IsNot Nothing Then 'Acumular la cantidad
                    FilaActualizar.Cells("ColCant").Value += Cantidad
                End If
            End If
        End Sub


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Joyce_ACModerator lunes, 5 de diciembre de 2016 18:25
    • Marcado como respuesta Federico32113 martes, 6 de diciembre de 2016 19:01
    lunes, 5 de diciembre de 2016 17:38
  • Mira no me reconoce "Cast"

    'Cast' no es un miembro...

    lunes, 5 de diciembre de 2016 20:29
  • GastoPerey,

    ¿Tienes indicado el espacio de nombres para Linq?: Imports System.Linq

    lunes, 5 de diciembre de 2016 20:38
  • Me funciona perfecto(ya te lo marco como respuesta).

    Me quedo una "cosita" mas que quiero que haga.

    Si el producto seleccionado para la venta se queda sin stock el producto se elimina del datagrid eliminándose de la base también, con este código elimino.

      Private Function EliminarFila() As Integer
    
            ' Hay que encerrar el código entre un bloque
            ' Try ... End Try a fin de capturar la excepción
            ' producida y actuar en consecuencia.
            '
            Try
                Using cnn As New SqlConnection("....")
    
                    ' Hay que abrir explícitamente la conexión
                    '
                    cnn.Open()
    
                    ' Creamos el comando.
                    '
                    Dim cmd As SqlCommand = cnn.CreateCommand()
    
                    ' Le indicamos la consulta T-SQL de
                    ' eliminación que vamos a ejecutar.
                    '
                    cmd.CommandText = _
                     "DELETE FROM Productos " & _
                     "WHERE Id_producto = @Id_producto"
    
                    ' Almacenamos el número de registros que
                    ' se han eliminado.
                    '
                    Dim n As Integer
    
                    ' En lugar de recorrer todas las filas del
                    ' control DataGridView, únicamente recorremos
                    ' aquellas que actualmente se encuentran
                    ' seleccionadas.
                    '
                    For Each row As DataGridViewRow In DataGridView1.SelectedRows
    
                        ' Obtenemos el valor de la primera columna
                        ' de la fila actual, que se supone es el
                        ' valor del campo llamado Clave.
                        '
                        Dim Id_producto As Object = row.Cells(0).Value
    
                        ' Limpiamos la colección de parámetros
                        cmd.Parameters.Clear()
    
                        ' Añadimos el parámetro
                        '
                        cmd.Parameters.AddWithValue("@Id_producto", Id_producto)
    
                        ' Ejecutamos la consulta
                        '
                        Dim result As Integer = cmd.ExecuteNonQuery()
    
                        ' Sumamos los registros eliminados
                        '
                        n += result
                    Next
    
                    ' Devolvemos el número de registros eliminados
    
                    Return n
    
                End Using
    
            Catch ex As Exception
                ' Devolvemos la excepción al procedimiento llamador
                MsgBox("Ocurrio un error.")
    
            End Try
    
        End Function

    Como puedo hacer en caso de querer quitar el producto de la venta agregándolo al datagrid con todos los demas productos. Recordando que el mismo no esta mas en el datagrid ya que fue eliminado con la función anteriormente adjuntada ya que el producto quedo sin stock.

    Se podrá recuperar los demás campos que tiene el producto? como observación, proveedor, etc.

    Si la hago con el código que me pasaste recién se quitar del datagrid ventas pero no se agrega al otro.

    Espero me sepas entender, sino solo coméntame.



    lunes, 5 de diciembre de 2016 22:02
  • GastoPerey,

    Te sugiero dar mayor detalle de lo que necesitas, si es posible adjunta imágenes o esquemas de lo que tienes actualmente y de lo que deseas conseguir, considera que los que apoyamos en el foro tomamos tiempo de nuestras labores del día a día, cuanto mas claro esté el caso mas de uno se animará a contestar. Por otro lado, dado que el objetivo del hilo fue resuelto te sugiero cerrar el post y abrir uno nuevo dejando muy claro lo que necesitas.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 6 de diciembre de 2016 18:35