从数据库中删除数据,但不从数据网格中删除。 WPF

时间:2017-07-02 11:07:56

标签: c# wpf xaml datagrid

我在刷新数据网格时遇到问题。 有简单的应用程序来创建与Entity Framework连接的新客户端。 有3个按钮来创建新的,保存更改和删除。前两个工作正常,但删除所选行几乎没有问题。 单击“删除”按钮后,将从数据库中删除对象,但不会更新数据网格。 我尝试使用.Items.Resfresh(),从开始加载ItemSource,删除所选行但是有一些异常

f.e。 (当使用ItemsSource时,操作无效。请改为使用ItemsControl.ItemsSource访问和修改元素。)

我应该实现ObservableCollection(我对wpf是新手,如果是,那么如何)?

C#

Class<?>

XAML

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    _isLoading = true;
    clientDataGrid.ItemsSource = _repo.ClientsListInMemory();
    _clientViewSource = (ObjectDataProvider)FindResource("clientViewSource");
    _isLoading = false;
    clientDataGrid.SelectedIndex = 0;
}

private void deleteBtn_Click(object sender, RoutedEventArgs e)
{
    HotelContext db = new HotelContext();
    Client client = clientDataGrid.SelectedItem as Client;
    try
    {
        _currentClient = db.Clients.Where(c => c.Id == client.Id).Single();
        db.Clients.Remove(_currentClient);
        db.SaveChanges();
    //  refreshFunction()?
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

1 个答案:

答案 0 :(得分:0)

删除项目后,您可以刷新DataGrid的来源。

您可能会在此处申请:

private void deleteBtn_Click(object sender, RoutedEventArgs e)
{
    HotelContext db = new HotelContext();
    Client client = clientDataGrid.SelectedItem as Client;
    try
    {
        _currentClient = db.Clients.Where(c => c.Id == client.Id).Single();
        db.Clients.Remove(_currentClient);
        db.SaveChanges();
        clientDataGrid.ItemsSource = null;
        clientDataGrid.ItemsSource = GETYOURCLIENTSFROMDATABASE();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

如你所见,我补充道:

clientDataGrid.ItemsSource = null;
clientDataGrid.ItemsSource = GETYOURCLIENTSFROMDATABASE();

这意味着,重置您的网格源和GETYOURCLIENTSFROMDATABASE,您可以编写从数据库获取当前数据的方法,您可以使用LINQ或存储过程或任何您想要的程序,这将只是刷新您的UI(网格)。

但总的来说,我想向你推荐的是使用INotifyPropertyChanged接口,它将使你的网格实时更新,这意味着如果你更改数据网格中的值,例如,如果你删除它的项目将被删除来自数据网格等等。它很容易实现,这就是你应该探索的内容。

但是现在,我给你的话应该有用。