c#datagridview sum cells value

时间:2017-05-09 21:08:15

标签: c# datagridview dataset

我想在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.

有人可以帮我找到解决方案吗?

2 个答案:

答案 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)

  1. 单元格[i,6]为空,使用条件进行检查。
  2. 更好的做法是检查值是否为数字,因为如果它不是数字,您将获得异常(使用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);
        }
    }