当我使用另一个类

时间:2017-02-14 13:03:50

标签: c# wpf datagrid

我有一种方法可以在添加/编辑/删除数据后刷新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>

1 个答案:

答案 0 :(得分:1)

CurrentDb.Execute sqlStatement2, dbFailOnError 需要对现有 .Execute的引用。它不应该创建此页面的 new 实例。

当您打开窗口时,可以为窗口注入AddEmployeeWindow的引用:

EmployeePages

不要忘记修改EmployeePages的构造函数以接受AddEmployeeWindow win = new AddEmployeeWindow(this); //<-- win.Show(); 引用:

AddEmployeeWindow