как я могу показать сумму в столбце datagridview? - PullRequest
24 голосов
/ 23 сентября 2010

Мне нужно показать сумму столбца count из этого datagridview, но я не знаю, как мне добраться до данных в представлении данных.

Когда я нажимаю на кнопку, я хочу показать 94 в label1.

Как это можно сделать?

alt text

Ответы [ 8 ]

34 голосов
/ 23 сентября 2010
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();
15 голосов
/ 14 июня 2014

Быстрый и чистый способ с использованием LINQ

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

проверено на VS2013

14 голосов
/ 23 сентября 2010

Если ваша сетка связана с DataTable, я думаю, вы можете просто сделать:

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

Если она не связана с таблицей, вы можете легкоэто так:

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;
7 голосов
/ 23 сентября 2010

Используйте LINQ, если можете.

  label1.Text =  dataGridView1.Rows.Cast<DataGridViewRow>()
                                   .AsEnumerable()
                                   .Sum(x => int.Parse(x.Cells[1].Value.ToString()))
                                   .ToString();
3 голосов
/ 16 мая 2013
 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();
2 голосов
/ 23 сентября 2010

Добавьте итоговую строку в вашу коллекцию данных, которая будет привязана к сетке.

1 голос
/ 22 мая 2017
//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 голос
/ 17 апреля 2013

Вы можете сделать это лучше с двумя представлениями сетки данных, добавить один и тот же источник данных, скрыть заголовки второго, установить высоту второго = для высоты строк первого, отключить все изменяемые атрибуты второго , синхронизируйте полосы прокрутки обоих, только горизонтальные, поместите вторую на нижнюю часть первой и т. д.

посмотрите:

   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;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...