2010-09-23 18 views
20

Ich muss die Summe der count Spalte aus dieser datagridview zeigen, aber ich weiß nicht, wie ich zu den Daten in der Datagridview bekommen kann. Wenn ich auf die Schaltfläche klicke, zeige ich 94 in label1 an.Wie kann ich die Summe in einer Datagridview-Spalte anzeigen?

Wie kann das gemacht werden?

alt text

+2

@manhaz verifiziert! Erwägen Sie, die Antworten auf Ihre anderen Fragen zu verbessern, und die beste Frage sollten Sie als "akzeptierte Antwort" mit dem grünen Häkchen markieren. Es hilft Ihnen sicherzustellen, dass Sie gute Antworten auf zukünftige Fragen erhalten! –

Antwort

27
int sum = 0; 
for (int i = 0; i < dataGridView1.Rows.Count; ++i) 
{ 
    sum += Convert.ToInt32(dataGridView1.Rows[i].Cells[1].Value); 
} 
label1.text = sum.ToString(); 
5

Verwenden LINQ, wenn Sie können.

label1.Text = dataGridView1.Rows.Cast<DataGridViewRow>() 
            .AsEnumerable() 
            .Sum(x => int.Parse(x.Cells[1].Value.ToString())) 
            .ToString(); 
+0

Kann eine 'DataGridViewRow' jemals in eine' DataRow' umgewandelt werden? –

+0

Aber ... aber ... gibt es eine "Field" -Erweiterungsmethode für 'DataGridViewRow'? –

14

Wenn Ihr Netz zu einem DataTable gebunden ist, ich glaube, Sie können einfach tun:

// Should probably add a DBNull check for safety; but you get the idea. 
long sum = (long)table.Compute("Sum(count)", "True"); 

Wenn es nicht an einen Tisch gebunden ist, können Sie es leicht so machen:

var table = new DataTable(); 
table.Columns.Add("type", typeof(string)); 
table.Columns.Add("count", typeof(int)); 

// This will automatically create the DataGridView's columns. 
dataGridView.DataSource = table; 
+3

Ich werde an den Grund erinnert, warum ich hier bin ... Ich habe nie bemerkt, dass auf dem DataTable-Objekt eine Compute-Funktion existiert! – Brad

2

Fügen Sie die gesamte Zeile zu Ihrer Datensammlung hinzu, die an das Raster gebunden wird.

1

Sie können es besser mit zwei datagridview tun, fügen Sie die gleiche Datenquelle, verstecken Sie die Header der zweiten, stellen Sie die Höhe der zweiten = auf die Höhe der Zeilen der ersten, deaktivieren Sie alle resizierbaren Attribute der zweitens, synchronisieren Sie die Bildlaufleisten von beiden, nur horizontal, legen Sie die zweite auf dem botton des ersten usw.

einen Blick:

dgv3.ColumnHeadersVisible = false; 
    dgv3.Height = dgv1.Rows[0].Height; 
    dgv3.Location = new Point(Xdgvx, this.dgv1.Height - dgv3.Height - SystemInformation.HorizontalScrollBarHeight); 
    dgv3.Width = dgv1.Width; 

    private void dgv1_Scroll(object sender, ScrollEventArgs e) 
     { 
      if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll) 
      { 
       dgv3.HorizontalScrollingOffset = e.NewValue; 
      } 
     } 
3
decimal Total = 0; 

for (int i = 0; i < dataGridView1.Rows.Count; i++) 
{ 
    Total+= Convert.ToDecimal(dataGridView1.Rows[i].Cells["ColumnName"].Value); 
    } 

labelName.Text = Total.ToString(); 
11

Schnelle und saubere Art und Weise mit LINQ

Willkommen zu Stackoverflow:
int total = dataGridView1.Rows.Cast<DataGridViewRow>() 
       .Sum(t => Convert.ToInt32(t.Cells[1].Value)); 

auf VS2013

0
//declare the total variable 
int total = 0; 
//loop through the datagrid and sum the column 
for(int i=0;i<datagridview1.Rows.Count;i++) 
{ 
    total +=int.Parse(datagridview1.Rows[i].Cells["CELL NAME OR INDEX"].Value.ToString()); 

} 
string tota 
Verwandte Themen