none
como recorrer un for each

    Pregunta

  •  quiciera saber como uso en un FOR EACH que me recorre un datagridview pero si en ese datagrid hay varios articulos que voy a comprar ejemplo: caja de lapiz, cantidad 3, caja de lapicero, cantidad 5 y en mi inventario hay de existencia 10 cajas de lapiz y 15 caja de lapiceros me deberia actualizar a caja de lapiz 7 y caja de lapiceros 10 pero me guarda en mi DB el mismo valor es decir, caja de lapiz cantidad 7, caja de lapicero 7 como haria para que me guarde individualmente sus valores o sea uno por uno 

    gracias espero su ayuda.

    este es el codigo del botton que hace la actualizacion:

    Private Sub btnGuardarFact_Click(sender As Object, e As EventArgs) Handles btnGuardarFact.Click If Not TypeOf cmbCodigo.SelectedValue Is DataRowView Then Dim fila As DataRowView = DirectCast(cmbCodigo.SelectedItem, DataRowView) If txtRIF.Text = "" Or txtCliente.Text = "" Or dateFecha.Value > Date.Now Or cmbTipoCompra.Text = "Seleccionar..." Or txtPorcenDescuento.Text = "" Or txtPorcenIVA.Text = "" Then MsgBox("Rellene Todos Los Campos y/ó Fecha De Factura Mayor A La Actual", MsgBoxStyle.Information, "INFORMACION") Else guardar_factVenta() guardar_detVenta() ' ACTUALIZA EN LA BD LA CANTIDAD REAL DE ARTICULOS DISPONIBLES' Dim cantidad As New Integer Dim filadgw As DataGridViewRow For Each filadgw In dgwLista.Rows If cmbTipoCompra.Text = "DETAL" Then cantidad = fila.Item("EXISTDETAL_ART") - filadgw.Cells("Cantidad").Value actualizar_existencias(filadgw.Cells("Codigo").Value, cantidad, cmbTipoCompra.Text) ElseIf cmbTipoCompra.Text = "MAYOR" Then cantidad = fila.Item("EXISTMAYOR_ART") - filadgw.Cells("Cantidad").Value actualizar_existencias(filadgw.Cells("Codigo").Value, cantidad, cmbTipoCompra.Text) End If Next MsgBox("Actualizacion Realizada con Exito", MsgBoxStyle.Information, "INFORMACION") limpiar() txtNroFactura.Text += 1 End If End If

    end sub

    domingo, 12 de marzo de 2017 13:11

Respuestas

  • delap95,

    ¿El objeto cmbCodigo contiene las existencias de los producto?

    Fíjate que por cada fila que se lee (de la colección dgwLista.Rows) el valor que se recupera del objeto cmbCodigo es el mismo (el seleccionado actualmente), no "trackea" en cada iteración, por tanto la resta se aplica sobre el mismo valor de existencia.

    La operación de suma/resta para obtener el stock actual debería ser parte de la consulta de acción, no deberías tomar la existencia de algún lugar que podría no estar actualizado, por ejemplo:

    UPDATE Existencias SET EXISTDETAL_ART -= @Cantidad WHERE CodigoProd = @CodigoProd 

    ' ACTUALIZA EN LA BD LA CANTIDAD REAL DE ARTICULOS DISPONIBLES'
    For Each filadgw As DataGridViewRow In dgwLista.Rows
    
    	actualizar_existencias(
    		Convert.ToString(filadgw.Cells("Codigo").Value),
    		Convert.ToInt32(filadgw.Cells("Cantidad").Value),
    		cmbTipoCompra.Text)
    Next

    La función 'actualizar_existencias()' deberá tener la lógica suficiente para actualizar el stock según el tipo de compra.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 12 de marzo de 2017 14:23

Todas las respuestas

  • delap95,

    ¿El objeto cmbCodigo contiene las existencias de los producto?

    Fíjate que por cada fila que se lee (de la colección dgwLista.Rows) el valor que se recupera del objeto cmbCodigo es el mismo (el seleccionado actualmente), no "trackea" en cada iteración, por tanto la resta se aplica sobre el mismo valor de existencia.

    La operación de suma/resta para obtener el stock actual debería ser parte de la consulta de acción, no deberías tomar la existencia de algún lugar que podría no estar actualizado, por ejemplo:

    UPDATE Existencias SET EXISTDETAL_ART -= @Cantidad WHERE CodigoProd = @CodigoProd 

    ' ACTUALIZA EN LA BD LA CANTIDAD REAL DE ARTICULOS DISPONIBLES'
    For Each filadgw As DataGridViewRow In dgwLista.Rows
    
    	actualizar_existencias(
    		Convert.ToString(filadgw.Cells("Codigo").Value),
    		Convert.ToInt32(filadgw.Cells("Cantidad").Value),
    		cmbTipoCompra.Text)
    Next

    La función 'actualizar_existencias()' deberá tener la lógica suficiente para actualizar el stock según el tipo de compra.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 12 de marzo de 2017 14:23
  • Willams Morales,

    gracias tu comentario me ayudo a ver que estaba mal ya lo solucione muchas gracias!

    lunes, 13 de marzo de 2017 0:11