我在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
55
答案 0 :(得分:0)
我不确定这是否是您的实际问题,但应使用string
或int
将int.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;
}
}