我能够设置 WPF Datagrid,通过 linq-to-sql 显示 Northwind 数据库表,并处理 TheDataGrid_RowEditEnding 事件,以便它保存数据库。
但是,当 CustomerID 更改时,它会从我处理的数据库中收到错误,但是我现在如何(1)回滚 Datagrid 控件或(2)从数据库视图 LINQ-to-SQL 重新获取原始数据(我在下面通过 LINQ 进行的重新获取似乎有某种缓存,它不会刷新):
<Grid DockPanel.Dock="Bottom">
<toolkit:DataGrid x:Name="TheDataGrid"
AutoGenerateColumns="True"
RowEditEnding="TheDataGrid_RowEditEnding"/>
</Grid>
private void TheDataGrid_RowEditEnding(object sender, Microsoft.Windows.Controls.DataGridRowEditEndingEventArgs e)
{
try
{
_db.SubmitChanges();
}
catch (Exception ex)
{
RefreshData();
Message.Text = ex.Message;
}
}
public void RefreshData()
{
var customers = from c in _db.Customers
select c;
TheDataGrid.ItemsSource = customers;
}
回答:
谢谢丹尼斯,我用你的建议来得到我所追求的:
private void TheDataGrid_RowEditEnding(object sender, Microsoft.Windows.Controls.DataGridRowEditEndingEventArgs e)
{
try
{
_db.SubmitChanges();
}
catch (Exception ex)
{
Customer customer = e.Row.Item as Customer;
_db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, customer);
Message.Text = ex.Message;
}
}