在数据网格绑定到数据源的每列中添加行的总和

时间:2016-11-27 17:10:04

标签: c#

我在datagrid中有动态列绑定到datasource.Now我想将每列的总和作为最后一行添加到我的代码的每一列

DataTable dt = dgvReport.DataSource as DataTable;
DataRow row = dt.NewRow();
dt.Rows.Add(row);
row[0] = "Totals";
for (int i = 1; i < dgvReport.Columns.Count; i++)
{
    int sum = 0;
    for (int j = 1; j < dgvReport.Rows.Count; ++j)
    {
        sum += Convert.ToInt32(dgvReport.Rows[j].Cells[i].Value.ToString());
    }
}

但它不起作用。我需要每列    15个
   10

30

55

2 个答案:

答案 0 :(得分:0)

我不确定这是否是您的实际问题,但应使用stringintint.Parse转换为int.TryParse

sum += int.Parse(dgvReport.Rows[j].Cells[i].Value.ToString());

但是,在你的情况下,我猜你已经在单元格中有整数,在这种情况下你只需要Convert.ToInt32,而不需要调用ToString

sum += Convert.ToInt32(dgvReport.Rows[j].Cells[i].Value);

答案 1 :(得分:0)

您要汇总所有行,包括没有值的“总计”行。并且不需要使用ToString()然后转换为整数。

根据你的循环,我假设Colum [0]和Row [0]有你的表格的标题。

|------|-------|------|------|
|      | Cap1  | Cap2 | Cap3 |
|------|-------|------|------|
| Cap1 |  10   |  20  |  10  |
|------|-------|------|------|
| Cap2 |  15   |  10  |  13  |
|------|-------|------|------|
|Totals|  25   |  30  |  23  |
|------|-------|------|------|

DataTable dt = dgvReport.DataSource as DataTable;
DataRow row = dt.NewRow();
dt.Rows.Add(row);
row[0] = "Totals";

for (int i = 1; i < dgvReport.Columns.Count; i++)
{
    int sum = 0;
    for (int j = ; j < dgvReport.Rows.Count; ++j)
    {
        if ( j < dgvReport.Rows.Count - 1)
            sum += Convert.ToInt32(dgvReport.Rows[j].Cells[i].Value);
        else
            dgvReport.Rows[j].Cells[i].Value = sum;
    }
}