Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用MS DataGrid的OleDb连接将编辑的值更新到Microsoft Access数据库?_C#_Database_Wpf_Datagrid_Oledb - Fatal编程技术网

C# 如何使用MS DataGrid的OleDb连接将编辑的值更新到Microsoft Access数据库?

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

我们已经将datagrid与OleDb连接数据库绑定。在更改单元格值的同时,我们正在使用DataTableAdapter.Update方法更新RowChanged中的数据库。但在关闭并再次启动应用程序时,修改后的值不会在datagrid中更新

下面是我用来更新数据库的代码片段

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。