2010-09-23 32 views
20

Devo mostrare la somma della colonna count da questo datagridview, ma non so come posso accedere ai dati nella vista dati.come posso mostrare la somma di in una colonna datagridview?

Quando faccio clic sul pulsante, voglio mostrare 94 in label1.

Come si può fare?

alt text

+2

@manhaz: benvenuti a StackOverflow! Considerare l'aumento delle risposte alle altre domande e la migliore, dovresti contrassegnare come "risposta accettata" con il segno di spunta verde. Ti aiuterà a ottenere buone risposte alle domande future! –

risposta

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

utilizzare LINQ se potete.

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

Un 'DataGridViewRow' può mai essere lanciato su un' DataRow'? –

+0

Ma ... ma ... c'è un metodo di estensione 'Field' su' DataGridViewRow'? –

14

Se la griglia è legato ad un DataTable, credo che si può fare solo:

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

Se non è associato a una tabella, si potrebbe facilmente fare in modo:

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

Mi viene in mente la ragione per cui sono qui ... Non ho mai nemmeno realizzato una funzione 'Compute' sull'oggetto DataTable! – Brad

2

Aggiungere la riga totale alla raccolta dati che verrà associata alla griglia.

1

si può fare meglio con due datagridview, si aggiunge la stessa origine dati, si nascondono le intestazioni del secondo, si imposta l'altezza del secondo = all'altezza delle righe del primo, si disattivano tutti gli attributi ridimensionabili del secondo, sincronizzare le barre di scorrimento di entrambi, solo orizzontale, mettere il secondo sul bottone del primo ecc

un'occhiata:

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

modo veloce e pulito utilizzando LINQ

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

verificata sulla 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 
Problemi correlati