我在datagrid中插入一行DataSet dataset=(DataSet)dataGrid1.DataSource;
DataTable datatable=dataset.Tables[0];
                 
DataColumn[] key=new DataColumn[1];
key[0]=datatable.Columns["ID"];
datatable.PrimaryKey=key;
System.Data.DataRow row=datatable.NewRow();
datatable.Rows.InsertAt(row,Row+1);datatable.AcceptChanges();//如果不要这句话,在datagrid上就不能显示出在指定的位置,插入的一行。如果要了,新插入的这一行的状态就不是Add,updata的时候它调用的是UpdataCommand而不是InsertCommand,肯定出错。
不知道这种情况怎么处理。
给一段示范性的代码,小弟不胜感激!

解决方案 »

  1.   

    在调用datatable.AcceptChanges();之前
    调用
    DataAdapter.Update(datatable);
      

  2.   

    不行呀,如果在这里Updata那么字段都是空值,该字段不允许为空,只有在datagrid中填入值之后才能Updata,所以必须在AcceptChanges之后才能Updata
      

  3.   

    我想再问一个问题,
    我现在有两种方式保存数据库
    不知道那种好。
    1.在删除移行记录,或者新增一条记录的时候,没有调用datatable.AcceptChanges()来接受改变
    到最后用Adapter.Updata(dataset)来处理。
    这样就会产生一个问题,在删除一行后,如果没有接受改变,在给数据库一列赋值的时候,就会提示
    不能访问已经删除的记录。
    2. 针对上述问题,我换了一种做法,就接受改变datatable.AcceptChanges().这时候就不能再最后一块Adapter.Updata(dataset)。因为所有行在datatable.AcceptChanges()后状态都变成了UnChange。
    我就定义了三个数组来保存,状态发生改变的记录。
    然后自己写SQL语句来保存数据。这样比叫麻烦
    不知道各位怎么处理这个问题。
      

  4.   

    先把表中的数据填充到DataGrid里,
    然后再Update(DataSet)
      

  5.   

    但是如何在datagrid 插入多行以后Update 数据库。
    最好给个例子
      

  6.   

    1.在删除移行记录,或者新增一条记录的时候,没有调用datatable.AcceptChanges()来接受改变
    到最后用Adapter.Updata(dataset)来处理。
    这样就会产生一个问题,在删除一行后,如果没有接受改变,在给数据库一列赋值的时候,就会提示
    不能访问已经删除的记录。
    2. 针对上述问题,我换了一种做法,就接受改变datatable.AcceptChanges().这时候就不能再最后一块Adapter.Updata(dataset)。因为所有行在datatable.AcceptChanges()后状态都变成了UnChange。
    我就定义了三个数组来保存,状态发生改变的记录。
    然后自己写SQL语句来保存数据。这样比叫麻烦
    不知道各位怎么处理这个问题。