Как сделать проверку для datagrid и исключить значения, которые встречаются в других datagrid?

У меня есть datagrid и в нем список строк с разными значениями. Есть datagrid2, в нем тоже есть значения и они связаны ключом, но не везде, нужно чтоб если находилась связь, то в datagrid не отображались значения, которые связаны с datagrid2. Например, есть в datagrid есть 2 строки обе с такими данными : цифра (айдишник), название (варчар), ещё несколько варчаров и intовое поле для айдишника из datagrid2. В datagrid2 1 строка по типу: цифра(айдишник), варчар название и тд. Как сделать, чтоб в datagrid вывелась лишь та строка, в которой в поле для айдишников из datagrid2 не будет заполнено, а если будет, то но не выводилось

вот c#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace YchetApparatov
{
    /// <summary>
    /// Логика взаимодействия для ClaviaturaSpisocWindow.xaml
    /// </summary>
    public partial class ClaviaturaSpisocWindow : Window
    {
        private readonly HashSet<ClaviaturaTable> sourceCollection = new HashSet<ClaviaturaTable>();
        public static int SelectClavaInt;

        public ClaviaturaSpisocWindow()
        {
            InitializeComponent();
            DGMouseViev.ItemsSource = sourceCollection;
            foreach (var item in NormApparatYchetEntities2.GetContext().ClaviaturaTable.ToList())
                sourceCollection.Add(item);
        }

        private void BtnEdit_Click(object sender, RoutedEventArgs e)
        {
            AddNewClaviaturaWindow addnewclava = new AddNewClaviaturaWindow((sender as Button).DataContext as ClaviaturaTable);
            addnewclava.Show();
        }

        private void AddNewClaviaturaClick(object sender, RoutedEventArgs e)
        {
            AddNewClaviaturaWindow addnewclava = new AddNewClaviaturaWindow(null);
            addnewclava.Show();
        }

        private void DeleteClaviaturaClick(object sender, RoutedEventArgs e)
        {
            var clavaremoving = DGMouseViev.SelectedItems.Cast<ClaviaturaTable>().ToList();

            if (MessageBox.Show($" вы точно хотите удалить следующие {clavaremoving.Count()} элементов?", "внимание",
                    MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)

                try
                {
                    NormApparatYchetEntities2.GetContext().ClaviaturaTable.RemoveRange(clavaremoving);
                    NormApparatYchetEntities2.GetContext().SaveChanges();
                    MessageBox.Show("данные удалены");

                    DGMouseViev.ItemsSource = NormApparatYchetEntities2.GetContext().ClaviaturaTable.ToList();
                }


                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
        }

        private void UpdateClavaClick(object sender, RoutedEventArgs e)
        {
            DGMouseViev.ItemsSource = NormApparatYchetEntities2.GetContext().ClaviaturaTable.ToList();

        }

        private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            var filter_col = sourceCollection.Where(itemF => itemF.ModelClaviatura.Contains(TextPoick.Text));

            DGMouseViev.ItemsSource = filter_col;
            if (TextPoick.Text.Length == 0)
                DGMouseViev.ItemsSource = sourceCollection;
        }

        private void DGPrinterViev_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            var clavatable = NormApparatYchetEntities2.GetContext().ClaviaturaTable.ToList();

            var currentItem = (ClaviaturaTable)((FrameworkElement)sender).DataContext;
            SelectClavaInt = currentItem.IdClaviatura;
            //    MessageBox.Show(currentItem.IdPrinter.ToString()); // ну вывод строки которая наконец-то работает

            this.Close();
        }
    }
}

вот XAML

<Window x:Class="YchetApparatov.ClaviaturaSpisocWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:YchetApparatov"
        mc:Ignorable="d"
        Title="ClaviaturaSpisocWindow" Height="720" Width="1280">
    <Grid Margin="0,97,0,34">
        <Grid.RowDefinitions>
        </Grid.RowDefinitions>
        <DataGrid x:Name="DGMouseViev" AutoGenerateColumns="False" IsReadOnly="True" Margin="0,-3,0,126">
            <DataGrid.ItemContainerStyle>
                <Style TargetType="DataGridRow">
                    <EventSetter Event="MouseDoubleClick" Handler="DGPrinterViev_MouseDoubleClick"/>
                </Style>
            </DataGrid.ItemContainerStyle>
            <DataGrid.Columns>
                <DataGridTextColumn Header="Модель клавиатуры" Binding="{Binding ModelClaviatura}" ></DataGridTextColumn>
                <DataGridTextColumn Header="Инвентарный номер клавиатуры" Binding="{Binding InventarNomerClaviatura}" ></DataGridTextColumn>
                <DataGridTextColumn Header="Серийный номер клавиатуры" Binding="{Binding SeriyNomerClaviatura}" ></DataGridTextColumn>
                <DataGridTextColumn Header="Дата прихода оборудования" Binding="{Binding DataPrihodClava}" ></DataGridTextColumn>
                <DataGridTextColumn Header="Дата списания оборудования" Binding="{Binding DataSpisanClava}" ></DataGridTextColumn>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button Content="Редактировать" Name="BtnEdit" Click="BtnEdit_Click" Canvas.Left="10" Canvas.Top="63" Width="107" Height="21"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>



            </DataGrid.Columns>



        </DataGrid>
        <Button x:Name="AddNewClaviatura" HorizontalAlignment="Left" Margin="7,-94,0,0" VerticalAlignment="Top" Width="51" Background="{x:Null}" Click="AddNewClaviaturaClick" Height="45">
            <StackPanel Orientation="Horizontal" Height="45" Width="51">
                <Image Source="images/Plus.png" Margin="0,0,5,6" Width="46" />

            </StackPanel>
        </Button>
        <Button x:Name="DeleteClaviatura" HorizontalAlignment="Left" Margin="63,-94,0,0" VerticalAlignment="Top" Width="57" Click="DeleteClaviaturaClick" Background="{x:Null}" Height="45">
            <StackPanel Orientation="Horizontal" Height="45" Width="51">
                <Image Source="images/Krestik.png" Margin="0,0,5,5" Width="48" />

            </StackPanel>
        </Button>
        <Button Content="Очистить" HorizontalAlignment="Left" Margin="0,-30,0,0" VerticalAlignment="Top" Width="75"/>
        <TextBox x:Name="TextPoick" HorizontalAlignment="Left" Height="22" Margin="88,-30,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="165" TextChanged="TextBox_TextChanged"/>
        <Label Content="Фильтр" HorizontalAlignment="Left" Margin="0,-55,0,0" VerticalAlignment="Top" Height="25" Width="63"/>
        <Label Content="Поиск" HorizontalAlignment="Left" Margin="88,-55,0,0" VerticalAlignment="Top" Height="25" Width="63"/>
        <Button x:Name="UpdateClava" HorizontalAlignment="Left" Margin="125,-94,0,0" VerticalAlignment="Top" Width="51" Background="{x:Null}" Click="UpdateClavaClick" Height="45">
            <StackPanel Orientation="Horizontal" Height="45" Width="51">
                <Image Source="images/Update.png" Margin="0,0,5,0" Width="47" />

            </StackPanel>
        </Button>
    </Grid>
</Window>


Ответы (0 шт):