2016-07-16 15 views
1

Ich möchte die Summe des Gesamtpreises der Artikel anzeigen. Ich bin vor 2 Ausgaben:Summe anzeigen Summe der Werte einer Spalte einer DataTable

  • Es zeigt mir falsch insgesamt Artikeln Preis
  • I .00 auf den Gesamtpreis

Sie können prüfen Problem im image für eine klare Erklärung hinzufügen möchten.

Hier ist mein Code:

tDisplay.Text = "Return/" + "Receipt No:" + Return_Form.setalueforText011; 
label1.Text = Return_Form.setalueforText011; 

OleDbConnection VCON = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Restaurant.accdb"); 
DataSet dsa = new DataSet(); 
DataTable dt = new DataTable(); 
dsa.Tables.Add(dt); 

OleDbDataAdapter da = new OleDbDataAdapter(); 
da = new OleDbDataAdapter("SELECT [Column1],[Column2],[Column3] from [Total] Where [Receipt No] = " + label1.Text + "", VCON); 
da.Fill(dt); 
//dataGridView1.DataSource = dt; 

for (int i = 0; i < dt.Rows.Count; i++) 
{ 
    products.Add(new tblProduct() { productName = dt.Rows[i]["Column2"].ToString(),productPrice = Convert.ToDecimal(Math.Round(Convert.ToDecimal(dt.Rows[i]["Column1"].ToString())))}); 
    label3.Text = dt.Rows[i]["Column3"].ToString(); 
    textBox59.Text = "Rs: "+String.Format("{0:}", Total); 
    tblProduct selected = (tblProduct)(listBox60.SelectedItem); 
    Total += (decimal)selected.productPrice; 
} 
VCON.Close(); 

Antwort

1

In der Schleife Sie immer die SelectedItem Reihe zum Gesamt hinzufügen. Dies ist immer der erste Gegenstand, also verdoppeln Sie den Wert des ersten Gegenstandes.

for (int i = 0; i < dt.Rows.Count; i++) 
{ 
    // Create and initialize a new tblProduct from the datatable row 
    tblProduct current = new tblProduct(); 
    current.ProductName = dt.Rows[i]["Column2"].ToString(); 
    current.productPrice = Convert.ToDecimal(Math.Round(Convert.ToDecimal(dt.Rows[i]["Column1"].ToString()))); 

    // Add to your list of products 
    products.Add(current); 

    // This line is wrong because you overwrite the value at each loop 
    label3.Text = dt.Rows[i]["Column3"].ToString(); 

    // Sum the price of the current tblProduct 
    Total += (decimal)current.productPrice; 
} 
// Outside the loop update your total label 
textBox59.Text = "Rs: "+String.Format("{0:0.00}", Total); 

Wenn Sie mir erlauben, einen Rat zu geben. Benenne deine Kontrollen nicht auf diese Weise. Sie sind unlesbar und nicht leicht zu erkennen. Wenn Sie diesen Code an einem Tag betrachten, werden Sie viele Probleme haben, sich daran zu erinnern, welches Steuerelement textBox59 oder listBox60 ist.

+0

Vielen Dank s Ich danke Ihnen wirklich sehr, Sie töten wirklich Genie Person kann ich fragen Sie noch eine Frage, wenn Sie nichts dagegen haben, über Listbox –

+0

und eine weitere Sache, frage ich Sie in meiner ersten Frage, wie ich 0,00 mit Artikelpreis hinzufügen –

+0

Dieser Teil Ihrer Frage ist mir unklar. Ich kann nicht sehen, wie Sie Elemente zur ListBox hinzufügen. Wenn Sie jedoch den Artikel aus der Produktliste nehmen, müssen Sie ihn wie jetzt formatieren. – Steve

1

Anstelle von for-Schleife können Sie einfach Compute Methode der Datentabelle verwenden und einen Ausdruck zur Berechnung übergeben. Zum Beispiel:

var total = double.Parse(yourDataTable.Compute("SUM(Column1)", "").ToString()); 

auch insgesamt zu formatieren 2 Ziffern nach Dezimalstelle zu zeigen, Sie eine dieser Optionen verwenden: