我有一种方法可以在添加/编辑/删除数据后刷新DataGrid
。
public void EmployeesDbConnection<T>(T dbset, string collectionName, Page page) where T : class
{
CompanyManagerContext db = new CompanyManagerContext();
var collectionViewSource = page.FindResource(collectionName) as CollectionViewSource;
db.Set<T>().Load();
collectionViewSource.Source = db.Set<T>().Local;
collectionViewSource.View.Refresh();
}
我的问题是我的方法只有在我的数据网格所在的窗口/页面中使用时才有效。
场景是:
我在EmployeePage中有DataGrid
。
我在EmployeePage中添加 Button
。
当我点击添加 Button
时,会显示一个新的Window
(AddEmployeeWindow),其中包含输入员工数据的字段,例如(姓名,姓氏,生日等)并添加,重置和取消按钮。
当我点击添加 Button
时,我的数据会插入数据库,但DataGrid
无法刷新。
当我在员工页面中做同样的事情时,它会刷新。
在EmployeePage中我运行这样的方法(DataGrid
正在刷新):
dbManagement.EmployeesDbConnection(newEmployee, "CollectionViewSource", this);
在AddWindow中我运行这样的方法(DataGrid
没有刷新):
dbManagement.EmployeesDbConnection(newEmployee, "CollectionViewSource", empPage);
带
readonly EmployeePages empPage = new EmployeePages();
其XAML绑定代码:
<Page.Resources>
<CollectionViewSource x:Key="CollectionViewSource" d:DesignSource="{d:DesignInstance {x:Type models:Employee}, CreateList=True}"></CollectionViewSource>
</Page.Resources>
<DataGrid x:Name="EmployeesDataGrid" HorizontalAlignment="Left" Margin="10,355,0,0" VerticalAlignment="Top" Height="305" Width="880"
DataContext="{StaticResource CollectionViewSource}" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}"
RowDetailsVisibilityMode="VisibleWhenSelected" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn x:Name="IdColumn" Header="Id" Binding="{Binding Id}"/>
<DataGridTextColumn x:Name="FirstNameColumn" Header="First Name" Binding="{Binding FirstName}"/>
<DataGridTextColumn x:Name="LastNameColumn" Header="Last Name" Binding="{Binding LastName}"/>
<DataGridTextColumn x:Name="MobilePhoneNumberColumn" Header="Mobile Phone" Binding="{Binding MobilePhoneNumber}"/>
<DataGridTextColumn x:Name="EmailAdressColumn" Header="Email" Binding="{Binding MailAdress}"/>
<DataGridTextColumn x:Name="EmployeedDate" Header="Employeed Date" Binding="{Binding EmployedDate}"/>
<DataGridTextColumn x:Name="BirthdayDate" Header="Birthday Date" Binding="{Binding BirthDate}"/>
</DataGrid.Columns>
</DataGrid>
答案 0 :(得分:1)
CurrentDb.Execute sqlStatement2, dbFailOnError
需要对现有 .Execute
的引用。它不应该创建此页面的 new 实例。
当您打开窗口时,可以为窗口注入AddEmployeeWindow
的引用:
EmployeePages
不要忘记修改EmployeePages
的构造函数以接受AddEmployeeWindow win = new AddEmployeeWindow(this); //<--
win.Show();
引用:
AddEmployeeWindow