web-dev-qa-db-fra.com

comment puis-je afficher la somme de dans une colonne datagridview?

Je dois montrer la somme de la colonne count de cette datagridview, mais je ne sais pas comment accéder aux données dans le datagridview.

Lorsque je clique sur le bouton, je souhaite afficher 94 dans label1.

Comment cela peut-il être fait?

alt text

25
mahnaz
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();
34
JamesMLV

Manière rapide et propre en utilisant LINQ

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

vérifié sur VS2013

16
Natan Braslavski

Si votre grille est liée à un DataTable, je pense que vous pouvez simplement faire:

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

S'il n'est pas lié à une table, vous pouvez facilement le faire ainsi:

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;
14
Dan Tao

Utilisez LINQ si vous le pouvez.

  label1.Text =  dataGridView1.Rows.Cast<DataGridViewRow>()
                                   .AsEnumerable()
                                   .Sum(x => int.Parse(x.Cells[1].Value.ToString()))
                                   .ToString();
7
p.campbell
 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();
3
Sherin Reji

Ajoutez la ligne totale à votre collection de données qui sera liée à la grille.

2
dretzlaff17
//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
1
FELIXKIPRONO

vous pouvez le faire mieux avec deux datagridview, vous ajoutez la même source de données, masquez les en-têtes du second, définissez la hauteur du second = à la hauteur des lignes du premier, désactivez tous les attributs redimensionnables du second, synchronisez le les barres de défilement des deux, uniquement horizontales, mettent la seconde sur le fond du premier, etc.

regarde:

   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;
            }
        }
1
andor