C# datagridview中添加的未注释行处出现异常

C# datagridview中添加的未注释行处出现异常,c#,.net,winforms,exception-handling,datagridview,C#,.net,Winforms,Exception Handling,Datagridview,我有一个datagridview,其中一些列是可编辑的。Datagrid会自动在底部添加新行。我想在单击按钮时在数据库中插入网格的内容,但当我为每个循环写入insert查询时,它会抛出一个异常,因为底部有一个未限制的行 异常:对象引用未设置为对象的实例 请帮我修一下这个。。 代码在这里 private void btn_save_Click(object sender, EventArgs e) { try { con.Open(); cmd =

我有一个datagridview,其中一些列是可编辑的。Datagrid会自动在底部添加新行。我想在单击按钮时在数据库中插入网格的内容,但当我为每个循环写入insert查询时,它会抛出一个异常,因为底部有一个未限制的行 异常:对象引用未设置为对象的实例 请帮我修一下这个。。 代码在这里

private void btn_save_Click(object sender, EventArgs e)
{
    try
    {
        con.Open();
        cmd = new SqlCommand("Select SupplierId from  tbl_Supplier where SupplierName ='" + cmbSupplierName.Text + "'", con);
        sdr = cmd.ExecuteReader();
        if (sdr.HasRows)
        {
            while (sdr.Read())
            {
                string sup_id = sdr["SupplierId"].ToString();
                //txt_id.Text = sup_id;
            }
        }

        foreach (DataGridViewRow row in grdPurchase.Rows)
        {
            string material_id = row.Cells[2].Value.ToString();
            int m_id = int.Parse(material_id);
            string Quantity = row.Cells[3].Value.ToString();
            float m_quantity = float.Parse(Quantity);
            string rate = row.Cells[4].Value.ToString();
            float m_rate = float.Parse(rate);
            string total = row.Cells[5].Value.ToString();
            float m_total = float.Parse(total);
            //string bill = txt_billno.Text;
            int supplier_id = int.Parse(sup_id);
            //string date = dtp_Purchase.Text;

            // dt.Rows.Add(supplier_id, bill, m_id, m_quantity, m_rate, m_total, date);
            String query = "insert into tbl_Purchase (SupplierId,MaterialId,BillNo,Quantity,Rate,Total,Date) values(" + supplier_id + "," + m_id + ",'" + txt_billno.Text + "'," + m_quantity + "," + m_rate + "," + m_total + ",'" +  dtp_Purchase.Text + "')";
            cmd = new SqlCommand(query, con);
            cmd.ExecuteNonQuery();
                //object id = cmd.ExecuteScalar();
                //  string purchase_id = id.ToString();
            MessageBox.Show("Inserted: ");
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message.ToString());
    }
    finally
    {
        sdr.Close();
        con.Close();
    }
}

可以使用以下属性筛选出新行:

foreach (DataGridViewRow row in grdPurchase.Rows)
{
   if (row.IsNewRow)
   {
       continue;
   }
   ...

GridView自动添加一行是不正常的。您确定此行在您的数据源中不可用吗?GridView只是数据源的一个视图,所以问题就在这里。您正在使用哪个数据源?此外,如果创建一个类,它会更漂亮。每行由一个对象表示,数据源是一个列表。如果要从GridView获取所有数据,可以使用列表或从类中强制转换类型中的每个数据行


如果没有一些代码来显示您正在做什么,以及您是如何做的,您会问我们一个不可能的问题。向我们显示代码的相关部分…这将如何工作?IsNewRow属性做什么?因为我试过用IsNewRow,但是Inain….:从链接文档:因为新记录的行在Rows集合中,所以使用IsNewRow属性确定行是新记录的行还是填充的行。当开始向行中输入数据时,行不再是新行。