你只要用DataAdapter的Update()方法更新DataSet的一个表就行了,他就会对dataset的这个表的所有改动进行更新!
如:
OleDbDataAdapter daTable1=new OleDbDataAdapter("select * from table1",conn);
daTable1.Update(ds.Table1);
如:
OleDbDataAdapter daTable1=new OleDbDataAdapter("select * from table1",conn);
daTable1.Update(ds.Table1);
点“修改”的时候,在datagrid里面设置一个隐藏的ID序列
这样就可以取值了。
注意,你应该把PK列设为只读
SqlDataAdapter adapter=new SqlDataAdapter("select * from authors",sqlConn);
//用来自动生产更新命令
SqlCommandBuilder cb=new SqlCommandBuilder(adapter);
sqlConn.Open();
DataSet ds=new DataSet();
adapter.Fill(ds);
sqlConn.Close();
//处理数据在打开和关闭之后
//更改数据
ds.Tables[0].Rows[0][1]="A";
//更新数据库
sqlConn.Open();
adapter.Update(ds);
sqlConn.Close();
“当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand。”错误信息。
代码如下:
protected void Grid_UpdateCommand(object sender,DataGridCommandEventArgs e)
{
if(e.CommandName=="Update")
{
string sql = "Select * from [DiskInfo] Order by [CardID]";
ds = new DataSet();
OleDbDataAdapter adapter = new OleDbDataAdapter(sql,dbmanager.helper.myConnection);
adapter.Fill(ds,"DiskInfo"); int nshtR = (DiskGrid.CurrentPageIndex * DiskGrid.PageSize)+DiskGrid.EditItemIndex; for(int i=1;i<DiskGrid.Columns.Count;i++)
{
string s = ((TextBox)e.Item.Cells[i].Controls[0]).Text;
ds.Tables["DiskInfo"].Rows[nshtR][i] = s;
}
adapter.Update(ds,"DiskInfo");
DiskGrid.DataSource = ds.Tables["DiskInfo"].DefaultView; DiskGrid.DataBind();
DiskGrid.EditItemIndex = -1;
}
}