获取异常说不能以编程方式添加行

时间:2017-02-23 04:31:42

标签: c# winforms datagridview

我有一个datagridview,它根据账单编号显示销售详情。我有另一个列出产品的datagridview。我在Product datagridview中添加了一个单元格双击事件,当我双击某个项目时,它应该出现在我的销售数据网格中。但是,由于我已根据账单编号将数据从数据库添加到销售数据网格中,因此无法将新产品添加到该数据网格视图中。 Iam得到例外,当控件是数据绑定时,无法以编程方式将行添加到datagridviews行集合中。

这是我在datagridview单元格中的代码双击

var index = dgv_POS.Rows.Add();
        string a = dgv_ItemNamePOS.CurrentRow.Cells[0].Value.ToString();
        dgv_POS.Rows[index].Cells[1].Value = a.ToString();



        string CS = "data source=.; database=BillingSoftware; user id=sa; password=9495640";
        using (SqlConnection con = new SqlConnection(CS))
        {
            con.Open();

            SqlCommand cmd = new SqlCommand("SELECT Item_No from Items where Name=@Name AND Activate='Yes'", con);
            cmd.Parameters.AddWithValue("@Name", a);
            string k = cmd.ExecuteScalar().ToString();
            dgv_POS.Rows[index].Cells[1].Value = k;


            SqlCommand cmd2 = new SqlCommand("SELECT Name from Items where Name=@Name AND Activate='Yes'", con);
            cmd2.Parameters.AddWithValue("@Name", a);
            string k1 = cmd2.ExecuteScalar().ToString();
            dgv_POS.Rows[index].Cells[2].Value = k1;

            SqlCommand cmd5 = new SqlCommand("SELECT Quantity_Type from Items where Name=@Name AND Activate='Yes'", con);
            cmd5.Parameters.AddWithValue("@Name", a);
            string k3 = cmd5.ExecuteScalar().ToString();
            dgv_POS.Rows[index].Cells[3].Value = k3.ToString();
        }

数据绑定datagridview的代码

SqlDataAdapter da = new SqlDataAdapter("SELECT Item_no as [Item No.],Item,Qty_Type as [Qty Type], Price, Quantity, Amount FROM POS WHERE Bill_No=@Billno", con);
            da.SelectCommand.Parameters.AddWithValue("@Billno", txt_BillNoPOSUpdate.Text);
            DataTable dt = new DataTable();
            da.Fill(dt);
            dgv_POSUpdate.DataSource = dt;

1 个答案:

答案 0 :(得分:1)

错误告诉您需要做什么:

  

当控件受数据绑定时,无法以编程方式将行添加到datagridviews行集合中。

由于DataGridView是Data-Bound,你不向它添加一行,你可以向数据源添加一个Row / Item。

List<Sale> sales = GetSalesInfo(id);
//or if its a DataTable
DataTable sales  = GetSalesInfo(id);
dgv_POS.DataSource = sales;  //<-- your DataGridView is bound to a data source

要向网格添加新行,请添加新的销售项目:

sales.Add(new Sale { Name= name, Price = 123 } );
//or if its a DataTable
sales.Rows.Add(new object[] { name,123 } );