感谢您使用微软产品。在C#中,如果DataGrid绑定到单一的数据表,可以使用OleDbCommandBuilder (SqlCommandBuilder)类来非常方便地实现datagrid -数据库记录的增加、删除和存盘功能。通过OleDbCommandBuilder (SqlCommandBuilder)来自动生成DataAdapter的DeleteCommand, InsertCommand和UpdateCommand等命令。但是,需要绑定到DataGrid的数据表设定Primary Key(主键)。
此时,并不需要知道那些cell被改过,就可以实现将改动后的结果更新到数据库。
(如果基于其他的目的,需要实现检测那些Cell被改动了,则可通过实现DataGrid控件对象的CurrentCellChanged事件,对相应的被改动过的Cell进行标示或记录。)
下面提供一个简单的示例程序,供您参考:
private OleDbCommandBuilder FriendsCmdBuilder; //用于自动生成SQL指令
private DataSet FriendsDataSet= new DataSet(); 
private OleDbDataAdapter  FriendsAdapter;  
……
// 通过GridBind,将数据表Friends绑定到DataGrid1
private void GridBind()
{
String ConnStr="Provider=SQLOLEDB;server=SHA-RICKIE-01;uid=user;pwd=user;database=test";
OleDbConnection myConnection= new OleDbConnection(ConnStr);
FriendsAdapter = new OleDbDataAdapter("select * from friends",myConnection);
/// 实例化OleDbCommandBuilder
FriendsCmdBuilder = new OleDbCommandBuilder(FriendsAdapter);
///fill the dataset
FriendsAdapter.Fill(FriendsDataSet, "Friends");
///set the dataset as a datasource for windows datagrid
dataGrid1.SetDataBinding(FriendsDataSet,"Friends");
}private void btnSave_Click(object sender, System.EventArgs e)
{
try
{
///执行inserts,updates,deletes指令
/// Without the OleDbCommandBuilder, this line would fail.
FriendsAdapter.Update(FriendsDataSet,"Friends");
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}关于OleDbCommandBuilder的更详细信息,请参考MSDN:
ms-help://MS.VSCC/MS.MSDNVS/cpref/html/frlrfSystemDataOleDbOleDbCommandBuilderClassTopic.htm — 微软全球技术中心 VB支持中心本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。