C#中列值的总和
我使用以下代码来计算数据库中特定行的总和,并将其显示在该意图列下的新行中。 但我会遇到一个错误。
你调用的对象是空的
请帮我解决这个问题。
提前致谢。
int sum = 0; for (int i = 0; i < dt.Rows.Count; i++) { sum += int.Parse(dataGridView1.Rows[i].Cells["Fee"].Value.ToString()); } DataSet ds = new DataSet(); adapter.Fill(ds); DataRow row = ds.Tables["Entry"].NewRow(); ds.Tables["Entry"].Rows.Add(row);
我想知道如何在新行中看到总和。
我认为错误在循环语句中:
代替:
for (int i = 0; i < dt.Rows.Count; i++) { sum += int.Parse(dataGridView1.Rows[i].Cells["Fee"].Value.ToString()); }
用这个:
for (int i = 0; i < dt.Rows.Count - 1; i++) { sum += int.Parse(dataGridView1.Rows[i].Cells["Fee"].Value.ToString()); }
你从Index zero
开始,所以你应该扣除一个总行数。 当它到达时,它将返回Object reference not set to an instance of an object
:
sum += int.Parse(dataGridView1.Rows[dt.Rows.Count].Cells["Fee"].Value.ToString());
因为这样的行不存在。
更新1
在循环之后,插入以下语句:
dataGridView1.Rows.Add("", "", sum)
更新2
int sum = 0; for (int i = 0; i < dt.Rows.Count - 1; i++) { sum += int.Parse(dataGridView1.Rows[i].Cells["Fee"].Value.ToString()); } DataSet ds = new DataSet(); adapter.Fill(ds); DataRow row = ds.Tables["Entry"].NewRow(); row[0] = ""; row[1] = ""; row[2] = sum; ds.Tables["Entry"].Rows.Add(row);
‘ds’没有表’Entry’,这就是为什么你得到’对象引用未设置为对象的实例’错误。
你可以在datatable中使用compute方法。 从compute方法获取结果然后从datatable创建新行,然后分配给适当的字段。 然后将新行添加到datatable。
虽然你的问题不是很清楚但是检查循环可以从数据表或从网格中访问值
for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i]["Fee"].Value !=null) sum += int.Parse(dt.Rows[i]["Fee"].Value.ToString()); }
并且还要确保dt.Rows [i] [“Fee”]不包含空值即使您可以使用Compute方法来执行求和。
我建议你使用调试器,看看这个错误发生在哪里:)
如果DB为一个“FEE”单元返回null,也会发生这种情况。 运行它,看看你到底在哪里看看值,如果你看到你需要的null,如果!= null。