C# 单击“保存”按钮时,将错误设置为对象引用未设置为对象的实例

C# 单击“保存”按钮时,将错误设置为对象引用未设置为对象的实例,c#,winforms,datagridview,C#,Winforms,Datagridview,单击btnSave时,我得到“对象引用未设置为对象的实例”。我想在gridview中插入值。问题是什么?任何网格单元格值都可能是null对null值应用ToString()将导致异常 private void btnSave_Click(object sender, EventArgs e) { int i = 0; foreach (DataGridViewRow row in dataGridView1.Rows) {

单击btnSave时,我得到“对象引用未设置为对象的实例”。我想在gridview中插入值。问题是什么?

任何网格单元格值都可能是
null
对null值应用
ToString()
将导致异常

private void btnSave_Click(object sender, EventArgs e)
    {
        int i = 0;

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (!row.IsNewRow)

                {
                    string keyword = row.Cells[0].Value.ToString();
                    string fname = row.Cells[1].Value.ToString();
                    string comm = row.Cells[2].Value.ToString();
                    string retur = row.Cells[3].Value.ToString();
                    string message = row.Cells[4].Value.ToString();
                    string inm = this.cmbInNa.Text.ToString();
                    i = pbl.fsave(keyword, fname, comm, retur, message, inm);
                    if (i > 0)
                    {
                        MessageBox.Show("Success");
                    }
                    else
                    {
                        MessageBox.Show("Error");
                    }
                }                            
        }
    }
最好的方法是在执行ToString()之前检查null。你可以用一个小盒子


对于null异常也有同样的问题,遵循这里给出的提示,但表中没有null字段

问题是,我通过删除以下行禁用了按钮列:

string keyword = (null != row.Cells[0].Value) ? row.Cells[0].Value.ToString() : string.Empty;

因此,对于每个按钮列,您必须提供一个事件处理程序,它可以没有代码。否则,无论您在表上单击什么,都会出现异常。

您在哪一行上获取错误,请尝试设置断点并单步执行逻辑尝试使用
Convert.ToString()
而不是
ToString()
方法,因为ToString方法抛出空指针异常使用调试器。。。打开异常对话框(调试菜单,异常…)并在“公共语言运行时异常”中设置标记。。。然后当程序中断时,你可以检查你的变量,看看哪一个是空的。。。这比猜测要好…我用你的代码AccessDenied替换了我的代码,但它不起作用,而调试时它将再次显示空异常。你能复制它引发异常的确切行吗?这个解决方案非常有效+问题和答案都有1个答案。这真的救了我的命。
string keyword = (null != row.Cells[0].Value) ? row.Cells[0].Value.ToString() : string.Empty;
dataGridView1.CellClick += new DataGridViewCellEventHandler(sense_button_Click);