void filldata()
{
DataGrid1.DataSource = dset.Tables [0];
DataGrid1.DataBind();
}
public void delete(object sender,DataGridCommandEventArgs e)
{
dset.Tables [0].Rows.RemoveAt(e.Item.ItemIndex);
dset.Tables [0].AcceptChanges ();
update();
filldata();
}
void update()
{
SqlCommandBuilder build=new SqlCommandBuilder (adapter);
adapter.UpdateCommand = build.GetUpdateCommand();
adapter.DeleteCommand = build.GetDeleteCommand();
adapter.Update(dset,"user");
}
adapter是一个全局的SqlDataAdapter,dset也是一个全局的DataSet,我在datagrid中放了一个删除按钮,就是datagrid自己带的那个,点删除以后datagrid中显示是没了,但是数据库中还有,重新进入页面就又出来了,你们说说会是什么原因

解决方案 »

  1.   

    dset.Tables [0].Rows.RemoveAt(e.Item.ItemIndex);
    dset.Tables [0].AcceptChanges ();
    dset.Update();
      

  2.   

    dset.Tables [0].AcceptChanges ();
    只是修改了本地的数据副本,所以datagrid中是没了。
    dataset是静态的数据集,本身跟数据库没有联系,dateadapter是联系本地dataset中的数据和数据库数据之间的纽带。
      

  3.   

    adapter.Update(dset,"user");我这句不是已经向数据库写入了么?user是一个表
      

  4.   

    哦,你是先调用delete,后现用update的?
    "user"表是Tables[0]么?
      

  5.   

    对,C#里面我没找到delete,只找到了removeat,然后acceptchange,最后update,可是现在就是不行,郁闷死了。
      

  6.   

    哦,对了,adatper的Update必须再recordset的AcceptChanges之前执行,因为AcceptChanges执行后Dateset所有的修改标志将被清除。
      

  7.   

    修改标记是adapter赖以得知dataset中那些行需要修改到数据库的唯一线索。
      

  8.   

    晕了,还是不行,我看我还是自己写sql语句算了