我刚刚开始探索WPF及其有关数据绑定的可能性。
我有一个示例Access数据库文件,并将其内容放入DataSet
。然后我将DataSet
绑定到一个Grid(双向绑定)。我想要实现的是更新已更改的DataSet
- 项的基础数据库条目。这是我的代码:
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>
将网格中更改的值实际持久保存到数据库文件的方法是什么?
答案 0 :(得分:1)
使用DataAdapter的更新方法。这将要求您使用执行实际插入,更新和删除的命令设置InsertMethod,UpdateMethod和DeleteMethod属性。只要select选中单个表(包括其主键或至少一个唯一列),您也可以使用System.Data.OleDb.OleDbCommandBuilder为您生成查询 See this too
另一种方法是使用实体框架并为您生成查询。
编辑第二个想法,你的问题是什么?您已经这样做了(除了设置更新,插入和删除命令。)
Look here了解如何将数据库与数据集同步