【问题标题】:Exception at the uncomitted row added in datagridview在 datagridview 中添加的未提交行的异常
【发布时间】:2012-06-07 12:13:18
【问题描述】:

我有一个数据网格视图,其中一些列是可编辑的。 Datagrid 自动在底部添加新行。我想在单击按钮时将网格的内容插入数据库中。但是当我为每个循环编写插入查询时,由于底部未提交的行,它会引发异常 例外:对象引用未设置为对象实例 请帮我解决这个问题.. 代码在这里

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

【问题讨论】:

  • 如果没有代码来显示你在做什么以及你是如何做的,你就在问我们一个不可能的问题。
  • 向我们展示代码的相关部分...

标签: c# .net winforms exception-handling datagridview


【解决方案1】:

您可以使用IsNewRow 属性过滤掉新行:

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

【讨论】:

  • 这将如何工作? IsNewRow 属性有什么作用?因为我尝试了 IsNewRow 但无效.. :(
  • 来自链接的文档:“因为新记录的行在 Rows 集合中,所以使用 IsNewRow 属性来确定一行是新记录的行还是填充的行。一行停止当数据输入到行开始时成为新行。"
【解决方案2】:

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

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    相关资源
    最近更新 更多