首先将WPF数据绑定到datagrid和实体框架数据库
使用数据库优先的方法,我在我的wpf项目中创建了实体(使用实体框架),所以我有了edmx文件 从MSDN: EF使用T4模板从模型生成代码。VisualStudio附带的或从VisualStudio库下载的模板用于一般用途。这意味着从这些模板生成的实体具有简单的ICollection属性。但是,在使用WPF进行数据绑定时,希望对集合属性使用ObservableCollection,以便WPF可以跟踪对集合所做的更改。为此,我们将修改模板以使用ObservableCollection 因此,我遵循本教程将实体更改为具有ObservableCollection属性: (更新数据绑定的代码生成部分) 在Visual Studio的WPF视图(在xaml文件中)中,我添加了一个DataGrid并添加了以下代码:首先将WPF数据绑定到datagrid和实体框架数据库,wpf,visual-studio-2010,entity-framework,data-binding,wpfdatagrid,Wpf,Visual Studio 2010,Entity Framework,Data Binding,Wpfdatagrid,使用数据库优先的方法,我在我的wpf项目中创建了实体(使用实体框架),所以我有了edmx文件 从MSDN: EF使用T4模板从模型生成代码。VisualStudio附带的或从VisualStudio库下载的模板用于一般用途。这意味着从这些模板生成的实体具有简单的ICollection属性。但是,在使用WPF进行数据绑定时,希望对集合属性使用ObservableCollection,以便WPF可以跟踪对集合所做的更改。为此,我们将修改模板以使用ObservableCollection 因此,我遵循
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
using (SIEntities siContext = new SIEntities())
{
var query = from p in siContext.Customers
select p;
dataGrid.ItemsSource = query.ToList();
}
}
首先,为了了解如何插入数据,我想从代码中在数据库中插入一个新客户,因此我有以下方法:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
using (SIEntities siContext = new SIEntities())
{
Customer cust1 = new Customers();
cust1.Name = "Pippo";
cust1.City = "London";
siContext.Customers.Add(cust1);
siContext.SaveChanges();
dataGrid.Items.Refresh();
}
}
通过这段代码,我可以在数据库中插入新行,但在datagrid中看不到这一新行
在xaml文件中,我为datagird提供了以下内容:
<DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Margin="43,65,0,0" VerticalAlignment="Top" Height="234" Width="423"/>
为什么??没有绑定到实体的数据网格?
如何显示数据库中添加的新行以及datagrid中的新行
谢谢我会将您使用WPF的方法更改为使用MVVM设计模式。你可以阅读更多关于这个的信息 DataGrid已绑定到查询结果。使用您正在使用的方法,您需要重新查询数据库并将ItemsSource重置为返回的结果。因此,按照您的模式,您需要进行以下更改:
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
RefreshCustomers();
}
private void RefreshCustomers()
{
using (SIEntities siContext = new SIEntities())
{
var query = from p in siContext.Customers
select p;
dataGrid.ItemsSource = query.ToList();
}
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
using (SIEntities siContext = new SIEntities())
{
Customer cust1 = new Customers();
cust1.Name = "Pippo";
cust1.City = "London";
siContext.Customers.Add(cust1);
siContext.SaveChanges();
}
RefreshCustomers();
}
问题。为什么不创建一个公共
客户
变量,它是列表
的列表,将数据网格
源绑定到该列表,然后在按钮上单击\u 1
只需将新客户添加到列表
变量并刷新数据网格源?这样你就不必每次都查询了。是的,你也可以这样做。如果您要这样做,您可能只需要转到完整的MVVM,这是我在第一段中建议的。