0

我使用以下这些代码来计算数据库中特定行的总和,并将其显示在该意图列下的新行中。但我会遇到错误。

你调用的对象是空的

请帮我解决这个问题。

提前致谢。

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);

我想知道如何在新行中看到总和。

4

6 回答 6

3

我认为错误在循环语句中:

代替:

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);
于 2012-05-07T06:08:48.690 回答
2

'ds' 没有表 'Entry',这就是为什么会出现“对象引用未设置为对象实例”错误的原因。

于 2012-05-06T20:24:31.410 回答
1

您可以在数据表中使用计算方法。从计算方法获取结果,然后从数据表创建新行,然后分配给适当的字段。然后将新行添加到数据表。

于 2012-05-07T06:04:57.953 回答
1

尽管您的问题不是很清楚,但请查看从数据表或网格访问值的循环

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 方法进行求和。

于 2012-05-07T05:57:34.383 回答
0

我建议你使用调试器,看看这个错误到底发生在哪里:)

于 2012-05-06T20:23:52.200 回答
0

如果数据库为一个“FEE”单元格返回 null,也会发生这种情况。运行它并查看您的确切位置并查看值,如果您看到 null,则需要 if != null。

于 2012-05-07T06:51:29.570 回答