2010-09-23 11 views
20

Muszę wyświetlić sumę kolumny count z tego datagridview, ale nie wiem, jak mogę uzyskać dane w datagridview.jak mogę wyświetlić sumę w kolumnie datagridview?

Po kliknięciu przycisku chcę pokazać 94 w label1.

Jak można tego dokonać?

alt text

+2

@manhaz: powitanie StackOverflow! Zastanów się nad odpowiedzią na pozostałe pytania, a najlepiej, zaznaczając jako "zaakceptowaną odpowiedź" zielony znacznik wyboru. Pomoże ci to uzyskać dobre odpowiedzi na przyszłe pytania! –

Odpowiedz

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

używać LINQ, jeśli możesz.

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

Czy 'DataGridViewRow' może być kiedykolwiek rzutowany na' DataRow'? –

+0

Ale ... ale ... czy istnieje metoda rozszerzenia 'Field' na' DataGridViewRow'? –

14

Jeśli siatka jest związany z DataTable, uważam, że można po prostu zrobić:

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

Jeśli nie jest związany z tabeli, można łatwo zrobić to tak:

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

Przypomina mi się przyczyna, dla której tu jestem ... Nigdy nie zdawałem sobie sprawy, że funkcja DataCable istnieje w funkcji "Obliczanie"! – Brad

2

Dodaj cały wiersz do zbioru danych, który będzie powiązany z siatką.

1

możesz zrobić to lepiej dzięki dwóm datagridview, dodać to samo źródło danych, ukryć nagłówki drugiego, ustawić wysokość drugiego = na wysokość wierszy pierwszego, wyłączyć wszystkie zmienne atrybuty drugi, synchronizować przewijania obu, tylko poziome, umieścić drugi na Botton pierwszego itd

spojrzeć:

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

szybki i czysty sposób przy użyciu LINQ

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

weryfikowana 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 
Powiązane problemy