2010-09-23 29 views
20

Necesito mostrar la suma de la columna count de este datagridview, pero no sé cómo puedo obtener los datos en la vista de cuadro de datos.¿cómo puedo mostrar la suma de en una columna datagridview?

Cuando hago clic en el botón, quiero mostrar 94 en label1.

¿Cómo se puede hacer esto?

alt text

+2

@manhaz: bienvenidos a Stackoverflow! Considere la posibilidad de votar las respuestas a sus otras preguntas, y la mejor, debe marcar como 'respuesta aceptada' con la marca de verificación verde. ¡Te ayudará a asegurarte de obtener buenas respuestas a preguntas futuras! –

Respuesta

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

uso de LINQ si es posible.

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

¿Puede un 'DataGridViewRow' ser lanzado a un' DataRow'? –

+0

Pero ... pero ... ¿hay un método de extensión 'Field' en' DataGridViewRow'? –

14

Si su red se enlaza a un DataTable, creo que sólo puede hacer:

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

Si no es enlazado a una tabla, que podría fácilmente hacerlo así:

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

Me acuerdo de la razón por la que estoy aquí ... ¡Ni siquiera me di cuenta de que existía una función 'Compute' en el objeto DataTable! – Brad

2

Agregue la fila total a su colección de datos que se vinculará a la cuadrícula.

1

puede hacerlo mejor con dos datagridview, agrega la misma fuente de datos, oculta los encabezados de la segunda, establece la altura de la segunda = a la altura de las filas de la primera, desactiva todos los atributos de tamaño de la en segundo lugar, sincronizar las barras de desplazamiento de ambos, solamente horizontal, poner el segundo en la parte de abajo de la primera etc.

echar un vistazo:

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

manera rápida y limpia utilizando LINQ

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

verifica en 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 
Cuestiones relacionadas