我想实现将DataGridView和数据库绑定后,用户在DataGridView中可以任意修改数据,增加多行记录,删除多条记录。数据库自动更新。
我的操作是在用户点击查询按钮后得出一个结果集              String connectionString = obj.GetConnectionStrings();
                dataAdapter = new SqlDataAdapter(selectCommand, connectionString);
                SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
                System.Data.DataTable table = new System.Data.DataTable();
                table.Locale = System.Globalization.CultureInfo.InvariantCulture;
                dataAdapter.Fill(table);                
                bindingSource1.DataSource = table;
用户在修改的时候没有问题,但是当用户在新增的时候就会不能保存数据的情况。捕获的错误提示
违反并发性 UpdateCommand 影响了预期 1 条记录中的 0 条以下代码是在CELL单元格失去焦点后的操作。
            this.Validate();
            bindingSource1.EndEdit();
               
                dataAdapter.Update((System.Data.DataTable)bindingSource1.DataSource);请大家给与指点谢谢!

解决方案 »

  1.   

    缺省情况下,用DATATABLE保存时,数据适配器会采用全字段作为更新的条件,若某个字段为空,则抛出楼主所描述的错误,你可以设置TABLE的主键,设置数据适配器的UPDATE语句的WHERE条件(只包含主键),则可以正常执行
      

  2.   

    现在修改功能是好的 就是在新增加行的时候不能正常。谁有 像delphi中的表格操作方法的例子。
    不管是新增加还是修改删除。只要鼠标离开单元格就保存到数据库中。
      

  3.   

    在datagridview和datatatable之间增加一个bindingsource控件
    bs.datasource=dt
    dgv.datasouce=bs.datasource
      

  4.   

    我也遇到过这个问题,我的处理方式:循环Rows,            
    #region 为了处理ADO.NET中Row值修改后,对应RowState状态值没有即时修改的问题。
                int iCount = table.Rows.Count;
                for (int i = 0; i < iCount; i++)
                {
                    table.Rows[i].EndEdit();
                }
                #endregion