我想在DataGridView中对单元格求和,并在MessageBox中显示结果。
我有两个DataGridViews。第一个DataGridView从数据库获取数据。从第一个DataGridView中选择行后,第二个DataGridView获取值。
这是我的代码
private void actionStatistics_Click(object sender, EventArgs e)
{
int total = 0;
for (int i = 0; i < productsDataGridView.Rows.Count; i++)
{
total += int.Parse(productsDataGridView.Rows[i].Cells[6].Value.ToString());
}
MessageBox.Show("Total quantity: " + total);
}
我在这一行得到错误:
total += int.Parse(productsDataGridView.Rows[i].Cells[6].Value.ToString());
错误是:
An unhandled exception of type 'System.NullReferenceException' occurred in task3.exe.
Additional information: Object reference not set to an instance of an object.
有人可以帮我找到解决方案吗?
答案 0 :(得分:0)
在添加之前检查空值:
total += int.Parse(productsDataGridView.Rows[i].Cells[6]?.Value?.ToString());
或旧方式:
for (int i = 0; i < productsDataGridView.Rows.Count; i++)
{
if(productsDataGridView.Rows[i].Cells[6] !=null && productsDataGridView.Rows[i].Cells[6].Value != null)
{
total += int.Parse(productsDataGridView.Rows[i].Cells[6].Value.ToString());
}
}
答案 1 :(得分:0)
更好的做法是检查值是否为数字,因为如果它不是数字,您将获得异常(使用Parse()
而不是TryParse()
时)。
以下是如何使用extension method进行操作的示例。
private void actionStatistics_Click(object sender, EventArgs e)
{
int total = 0;
for (int i = 0; i < productsDataGridView.Rows.Count; i++)
{
if (productsDataGridView.Rows[i].Cells[6] != null && (productsDataGridView.Rows[i].Cells[6].Value.ToString().IsNumeric()))
{
total += int.Parse(productsDataGridView.Rows[i].Cells[6].Value.ToString());
}
}
MessageBox.Show("Total quantity: " + total);
}
}
public static class ExtensionMethods
{
public static bool IsNumeric(this string s)
{
float output;
return float.TryParse(s, out output);
}
}