2017-08-07 2 views
-2

Meine if else-Anweisung nicht brechen, wenn ein Artikel nicht genügend Menge hat. Es zeigt an, dass es nicht genug Quantität hat, aber fährt fort und als Folge wird seine Quantität negativ.Kann nicht beenden/brechen, wenn sonst Anweisung

Zum Beispiel. Produkt A hat eine Menge von 20 in der Datenbank. In der Verkaufsstelle habe ich versucht, 25 zu verkaufen. Es zeigt "ungenügende Quantität" an, aber zieht noch die Quantität ab, also wird die Quantität -5. Ich möchte, dass es aufhört, wenn es "nicht genügend Menge" sagt.

Dies ist mein Code

private void btnAddcart_Click(object sender, EventArgs e) 
    { 
     if (!validateProduct()) 
     { 
      return; 
     } 
     else 
     { 
      ShowMyDialogBox(); 
     } 
     if (!alreadyincart()) 
     { 
      return; 
     } 
     else 
     { 

      int str, qty; 
      str = Convert.ToInt32(storeqty.Text); 
      qty = Convert.ToInt32(quantity.Text); 
      temporaryquantity.Text = str.ToString(); 

      if (str < qty || str == 0) 
      { 
       MessageBox.Show("Insufficient Stock", "Error", 
       MessageBoxButtons.OK, MessageBoxIcon.Error); 

       //its supposed to stop here but its still subtracting the 
       // quantity from the product 
      } 
      else 
      { 
       qty = Convert.ToInt32(quantity.Text); 
       unitprice = Convert.ToDouble(dgvPOSproduct.CurrentRow.Cells[6].Value.ToString()); 
       totalprice = qty * unitprice; 
       unittotal.Text = totalprice.ToString("0.00"); 

       addData 
        (
        dgvPOSproduct.CurrentRow.Cells[0].Value.ToString(), //prod id 
        dgvPOSproduct.CurrentRow.Cells[1].Value.ToString(), //brand 
        dgvPOSproduct.CurrentRow.Cells[4].Value.ToString(), //dosage 
        dgvPOSproduct.CurrentRow.Cells[6].Value.ToString(), //qty 
        quantity.Text, 
        unittotal.Text, 
        dgvPOSproduct.CurrentRow.Cells[7].Value.ToString(), 
        dgvPOSproduct.CurrentRow.Cells[8].Value.ToString() 
        ); 
      } 

      int dgvPOSquantity = Convert.ToInt32(dgvPOSproduct.CurrentRow.Cells[5].Value.ToString()); 
      int dgvnewquantity; 
      dgvnewquantity = dgvPOSquantity - qty; 
      dgvPOSproduct.CurrentRow.Cells[5].Value = dgvnewquantity; 

      discountremoveitem(); 

     } 

    } 
+4

Es gibt keine Schleife in der codierten ist geschrieben Sie. Auch wenn es einen Fehler zurückgibt, erklären Sie dann, welcher Fehler –

+0

Wie andere bemerkt haben, müssen Sie uns die Schleife zeigen, also können wir sehen, wie man ausbricht. Überprüfe das Offensichtliche: hast du eine 'break;' - Anweisung an dem Punkt versucht, an dem du ausbrechen willst? – dave

+0

Was meinst du mit der * if else Anweisung nicht zu brechen *? Wenn in das if oder das else, aber nicht beide abhängig von den Bedingungen gehen –

Antwort

2

Dies ist einfach, weil Sie Logik außerhalb der If Äußerung.

Bedeutung es diese Linie läuft -

if (str < qty || str == 0)

passt dann die verschiedenen Kriterien und springt aus der if Anweisung, die nächste Zeile trifft

int dgvPOSquantity

, die die Subtraktion der Fall ist.

Verschieben Sie Ihren Subtraktionscode in die else-Anweisung oder ändern Sie den Logikfluss.

Zum Beispiel:

if (str < qty || str == 0) 
     { 
      MessageBox.Show("Insufficient Stock", "Error", 
      MessageBoxButtons.OK, MessageBoxIcon.Error); 
//This statement is getting hit and exits the IF Statement 
     } 
     else 
     { 
      qty = Convert.ToInt32(quantity.Text); 
      unitprice = Convert.ToDouble(dgvPOSproduct.CurrentRow.Cells[6].Value.ToString()); 
      totalprice = qty * unitprice; 
      unittotal.Text = totalprice.ToString("0.00"); 

      addData 
       (
       dgvPOSproduct.CurrentRow.Cells[0].Value.ToString(), //prod id 
       dgvPOSproduct.CurrentRow.Cells[1].Value.ToString(), //brand 
       dgvPOSproduct.CurrentRow.Cells[4].Value.ToString(), //dosage 
       dgvPOSproduct.CurrentRow.Cells[6].Value.ToString(), //qty 
       quantity.Text, 
       unittotal.Text, 
       dgvPOSproduct.CurrentRow.Cells[7].Value.ToString(), 
       dgvPOSproduct.CurrentRow.Cells[8].Value.ToString() 
       ); 
     } 

//But then carries on from here, which does the subtraction. 
//You need to either move this code snippet into the else statement, or change the flow. 

     int dgvPOSquantity = Convert.ToInt32(dgvPOSproduct.CurrentRow.Cells[5].Value.ToString()); 
     int dgvnewquantity; 
     dgvnewquantity = dgvPOSquantity - qty; 
     dgvPOSproduct.CurrentRow.Cells[5].Value = dgvnewquantity; 

     discountremoveitem(); 

    } 
Verwandte Themen