C# 如何使用MS DataGrid的OleDb连接将编辑的值更新到Microsoft Access数据库?
我们已经将datagrid与OleDb连接数据库绑定。在更改单元格值的同时,我们正在使用DataTableAdapter.Update方法更新RowChanged中的数据库。但在关闭并再次启动应用程序时,修改后的值不会在datagrid中更新 下面是我用来更新数据库的代码片段C# 如何使用MS DataGrid的OleDb连接将编辑的值更新到Microsoft Access数据库?,c#,database,wpf,datagrid,oledb,C#,Database,Wpf,Datagrid,Oledb,我们已经将datagrid与OleDb连接数据库绑定。在更改单元格值的同时,我们正在使用DataTableAdapter.Update方法更新RowChanged中的数据库。但在关闭并再次启动应用程序时,修改后的值不会在datagrid中更新 下面是我用来更新数据库的代码片段 void MainWindow_Loaded(object sender, RoutedEventArgs e) { conn = new System.Data.OleDb.OleDbConnec
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
conn = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=EmployeeDatabase.accdb;Persist Security Info=True");
myDataAdapter = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM Employee", conn);
builder = new OleDbCommandBuilder(myDataAdapter);
ds = new DataSet();
conn.Open();
myDataAdapter.Fill(ds, "Employee");
myDataTable = ds.Tables["Employee"];
myDataTable.RowChanged += MyDataTable_RowChanged;
OleDbCommand command = new OleDbCommand(
"UPDATE Employee SET EmployeeName = @EmployeeName, EmployeeArea = @EmployeeArea, EmployeeDesignation = @EmployeeDesignation, EmployeeAge = @EmployeeAge " +
"WHERE ID = @ID", conn);
// Add the parameters for the UpdateCommand.
command.Parameters.Add("@EmployeeName", OleDbType.WChar, 255, "EmployeeName");
command.Parameters.Add("@EmployeeArea", OleDbType.WChar, 255, "EmployeeArea");
command.Parameters.Add("@EmployeeDesignation", OleDbType.WChar, 255, "EmployeeDesignation");
command.Parameters.Add("@EmployeeAge", OleDbType.Integer, 10, "EmployeeAge");
command.Parameters.Add("@ID", OleDbType.Integer, 10, "ID");
myDataAdapter.UpdateCommand = command;
conn.Close();
msDatagrid.ItemsSource = ds.Tables["Employee"].DefaultView;
Binding nbe = new Binding();
nbe.Source = ds;
nbe.Mode = BindingMode.TwoWay;
nbe.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
nbe.Path = new PropertyPath("Employee");
nbe.BindsDirectlyToSource = true;
msDatagrid.SetBinding(DataGrid.ItemsSourceProperty, nbe);
msDatagrid.Items.Refresh();
}
private void MyDataTable_RowChanged(object sender, DataRowChangeEventArgs e)
{
myDataAdapter.Update(myDataTable);
}
有人能建议如何更新与datagrid绑定的数据库吗
问候,,
Shobika。您是否尝试过myDataTable.AcceptChanges()@谢谢你的建议。我已经试过你建议的方法了。但在尝试调用myDataTable.AcceptChanges()时,我遇到了stackOverflow异常;在MyDataTable_RowChanged事件中。我认为更新正在更改触发另一个RowChangedEvent的行。因此,在RowChangedEvent中取消注册事件myDataTable.RowChanged-=myDataTable_RowChanged;在更新之前,然后再次注册更新。事件实际上应该是DGV更新,而不是DataTable。