2016-05-30 10 views
0
Dim aProductos As List(Of Producto) 
Dim aRegistros As New List(Of Registro) 
Dim selectedProd As New Producto 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    'Add to cart 
    Dim insert As Boolean = True 

Problem beginnt vvv HIERVB.net innerhalb einer Listenvariable Aktualisierung für jede Schleife

For Each reg In aRegistros 
     If (reg.id_prod = Integer.Parse(lbCodigo.Text)) Then 

      Dim r As New Registro 
      r.id_prod = reg.id_prod 
      r.cantidad = reg.cantidad + Integer.Parse(nudUni.Value.ToString) 
      reg = r 
      insert = False 
     End If 
    Next 

PROBLEM AUSBAU HIER ^^^

If insert Then 
     Try 
      Dim r As New Registro 
      r.id_prod = selectedProd.cod 
      r.cantidad = Integer.Parse(nudUni.Value.ToString) 
      aRegistros.Add(r) 
     Catch ex As Exception 
      MsgBox("Create and insert register: " + ex.Message) 
     End Try 
    End If 
    MostrarFactura() 
End Sub 

Private Sub MostrarFactura() << Updates a listview to see the products you got 
    listaProd.Items.Clear() 
    For Each registro In aRegistros 
     For Each producto In aProductos 
      If registro.id_prod = producto.cod Then 
       MsgBox(registro.cantidad) 
       listaProd.Items.Add(producto.nombre + " --- " + registro.cantidad.ToString + " -> " + (producto.precio * registro.cantidad).ToString + "€") 
      End If 
     Next 
    Next 
End Sub 

Das Problem ist, dass ich aktualisieren " reg "aber wenn die Schleife endet reg aktualisiert nicht den Wert innerhalb der Liste

Vielen Dank im Voraus: S

+0

Sie können der Liste, auf der Sie eine Enumeration mit foreach gestartet haben, nicht hinzufügen/entfernen. – Steve

+0

Was kann ich stattdessen verwenden? Vielleicht nur mit einer While-Schleife? –

+0

Sie können die Eigenschaft der aktuellen reg-Variablen ändern. _reg.cantidad = reg.cantidad + Integer.Parse (nudUni.Value.ToString); _ – Steve

Antwort

0

Anstatt eine For Each zu verwenden, können Sie eine Ganzzahl verwenden, um die Position in der Liste anzugeben.

For x = 0 to aRegistros.Count -1 
    Dim reg = aRegistros(x) 
    Dim r As New Registro 
    r.id_prod = reg.id_prod 
    r.cantidad = reg.cantidad + Integer.Parse(nudUni.Value.ToString) 
    aRegistros(x) = r 
    insert = False 
Next 
+0

Vielen Dank dave, ich habe nicht darüber bewusst, da ich mich nicht daran erinnern konnte, gab es eine einfache indizierte Schleife! –

+0

Nur zu sagen, das Problem scheint zu sein, dass ich Strukturen verwendet habe, und ich denke, sie können nicht geändert werden, wenn sie in einer Liste oder so ähnlich sind. Tatsache ist, dass ich sie für echte Klassen geändert habe und es funktioniert gut !! –