Я только начинаю изучать WPF и его возможности в отношении связывания данных.
Я получил образец файла базы данных Access и поместил его содержимое в DataSet
.Затем я связываю DataSet
с сеткой (двустороннее связывание).Чего я хочу добиться, так это обновить основную запись базы данных измененного DataSet
-Item.Это мой код:
public partial class MainWindow : Window
{
DataSet sampleDataSet;
OleDbDataAdapter adapter;
public MainWindow()
{
InitializeComponent();
InitializeDB();
}
private void InitializeDB()
{
string mdbFile = "./test.mdb";
string connString = string.Format(
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", mdbFile);
OleDbConnection conn = new OleDbConnection(connString);
adapter = new OleDbDataAdapter("SELECT * FROM Player;", conn);
// ----------------------
// **EDIT** inserted update command
OleDbCommand cmd = new OleDbCommand("UPDATE Player SET Name = @Name " +
"WHERE ID = @ID", conn);
cmd.Parameters.Add("@Name", OleDbType.VarChar, 40, "Name");
cmd.Parameters.Add("@ID", OleDbType.Char, 5, "ID");
// set the update command
adapter.UpdateCommand = cmd;
// **End of EDIT**
// ----------------------
sampleDataSet = new DataSet("Player Table");
adapter.Fill(sampleDataSet, "Player");
data1.DataContext = sampleDataSet;
}
private void data1_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if (e.EditAction == DataGridEditAction.Commit)
{
adapter.Update(sampleDataSet, "Player");
}
}
// Edit Comment April, 14th - Begin
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
//sampleDataSet.AcceptChanges();
adapter.Update(sampleDataSet, "Player"); // Calling update again fixes it, but why?
}
// Edit Comment April, 14th - End
}
Мой XAML выглядит так:
<Window x:Class="AdoTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid Name="data1" AutoGenerateColumns="True" ItemsSource="{Binding Mode=TwoWay, Path=Player}" CellEditEnding="data1_CellEditEnding" />
</Grid>
Каков подход, чтобы фактически сохранить измененные значения в сетке дофайл базы данных?