2016-05-04 15 views
1

Ich versuche, Datagridview Wert und Textbox simultan nach einem Klick eingefügt, aber die Daten wurden in der Datenbank dupliziert.Doppelte Daten in der Datenbank

Database duplicate image

Datagridview display

Kann mir jemand sagen, was das Problem in meinem Code ist, bitte?

Mein Code

 private void btnPay_Click(object sender, EventArgs e) 
    { 

      decimal pay, balance, total; 


      total = decimal.Parse(txtNetTotal.Text); 

      pay = decimal.Parse(txtCash.Text); 

      balance = pay - total; 

      txtCash.Text = pay.ToString("0.00"); 
      txtBalance.Text = balance.ToString("0.00"); 


     try 
     { 

      foreach (DataGridViewRow row in dgvOrder.Rows) 
      { 
       SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString); 
       SqlCommand cmd = new SqlCommand("insert into tblOrder (ProductName,Quantity,ProductPrice,TotalPrice,Cash,Balance)" + 
               "values (@ProductName,@Quantity,@ProductPrice,@TotalPrice,@Cash,@Balance)", con); 
       cmd.Parameters.AddWithValue("@ProductName", Convert.ToString(row.Cells["colProduct"].Value)); 
       cmd.Parameters.AddWithValue("@Quantity", Convert.ToString(row.Cells["colQuantity"].Value)); 
       cmd.Parameters.AddWithValue("@ProductPrice", Convert.ToString(row.Cells["colPrice"].Value)); 
       cmd.Parameters.AddWithValue("@TotalPrice", txtTotal.Text.Trim()); 
       cmd.Parameters.AddWithValue("@Cash", txtCash.Text.Trim()); 
       cmd.Parameters.AddWithValue("@Balance", txtBalance.Text.Trim()); 

       con.Open(); 
       cmd.ExecuteNonQuery(); 
       con.Close(); 
      } 
     } 
     catch(SqlException ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

Hier wird der gesamte Code für die Schaltfläche Ereignis.

+0

wo dieser Code geschrieben und ausgeführt? vielleicht wird diese Methode zweimal aufgerufen! – techspider

+1

Wenn Sie dies debuggen, wie oft wiederholt diese Schleife? Enthält 'dgvOrder.Rows' eine Zeile, die Sie nicht erwarten? – David

+0

Gibt es zwei Zeilen in Ihrem Datagrid? TippForeach (DataGridViewRow-Zeile in dgvOrder.Rows) –

Antwort

2

Basierend auf den obigen Kommentaren und auf das Bild in der Frage bearbeitet, hat Ihre DataGridViewzwei Zeilen. Welches ist, warum ist diese Schleife zwei Zeilen in die Datenbank einfügen:

foreach (DataGridViewRow row in dgvOrder.Rows) 

Es sieht aus wie die zweite Reihe ein Rohling ist, weshalb der zweite Datenbank-Eintrag erklärt nur die statischen Werte hat und nicht die zeilen- Basiswerte. Um dies zu verhindern, sollten Sie in der Lage sein, eine einfache bedingte hinzuzufügen:

foreach (DataGridViewRow row in dgvOrder.Rows) 
{ 
    if (!row.IsNewRow) 
    { 
     // insert into the database 
    } 
} 

Oder, wenn verschachtelte Code-Blöcke sind unansehnlich:

foreach (DataGridViewRow row in dgvOrder.Rows) 
{ 
    if (row.IsNewRow) 
     continue; 
    // insert into the database 
} 
+0

Dieser Code macht den Trick. Danke: D. Keine doppelten Daten in der Datenbank – NewbieLearner

Verwandte Themen