Как удалить строку из DataGrid и удалить её из базы данных SQL

На счёт похожих на StackOverflow вопросов. Они действительно похожи, но нигде нет точного ответа на поставленный вопрос, поэтому задаю его.

Есть база данных в которой хранятся данные о студентах. Есть форма на которой происходят все действия с бд, такие как удаление, добавление, изменение, удаление и поиск. У меня возник вопрос с удалением. Есть событие SelectionChanged. Которое по клику определяет строку в дата гриде. Так вот как мне используя это событие производить удаление строки как из DataGrid так и из самой бд.

Код С#:

    private void removeButton_Click(object sender, RoutedEventArgs e)
    {
        // строка подключения к бд. 
        connection.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "delete from Students where (не знаю что сюда написать";
        cmd.Connection = connection;
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable("Students");
        da.Fill(dt);
        DeportamentsGrid.ItemsSource = dt.DefaultView;
    }

Код XAML (WPF):

<Grid VerticalAlignment="Center" HorizontalAlignment="Center">
    <Button FontSize="20" Content="Назад" HorizontalAlignment="Left" Margin="666,371,0,0" VerticalAlignment="Top" Width="138" Height="39" Click="BackButton"/>
    <DataGrid   HorizontalAlignment="Left" Height="400" Margin="10,10,0,0" VerticalAlignment="Top" Width="601" AutoGenerateColumns="False" Name="DeportamentsGrid" FocusableChanged="DeportamentsGrid_FocusableChanged" SelectionChanged="DeportamentsGrid_SelectionChanged">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Number_Students}" Header="Номер студента" Width="100"/>
            <DataGridTextColumn Binding="{Binding First_Name_Students}" Header="Имя" Width="100"/>
            <DataGridTextColumn Binding="{Binding Mid_Name_Students}" Header="Отчество" Width="100"/>
            <DataGridTextColumn Binding="{Binding Last_Name_Students}" Header="Фамилия" Width="100"/>
            <DataGridTextColumn Binding="{Binding Address_Students}" Header="Адрес" Width="100"/>
            <DataGridTextColumn Binding="{Binding Course_Students}" Header="Курс" Width="100"/>
        </DataGrid.Columns>
    </DataGrid>
    <Button x:Name="updateButton" FontSize="20" Content="Обновить" HorizontalAlignment="Left" Margin="666,26,0,0" VerticalAlignment="Top" Width="138" Height="40" Click="updateButton_Click"/>
    <Button x:Name="removeButton" FontSize="20" Content="Удалить" HorizontalAlignment="Left" Margin="666,251,-0.8,0" VerticalAlignment="Top" Width="138" Height="40" Click="removeButton_Click"/>
    <Button x:Name="addButton" FontSize="20" Content="Добавить" HorizontalAlignment="Left" Margin="665,80,0,0" VerticalAlignment="Top" Width="138" Height="40" Click="addButton_Click"/>
    <Button x:Name="searchButton" FontSize="20" Content="Поиск" HorizontalAlignment="Left" Margin="666,134,-0.8,0" VerticalAlignment="Top" Width="138" Height="40" Click="searchButton_Click"/>
    <Button x:Name="changeButton" FontSize="20" Content="Изменить" HorizontalAlignment="Left" Margin="666,193,-0.8,0" VerticalAlignment="Top" Width="138" Height="40"/>
</Grid>

Строки из дата грид на форме. Меню, при нажатии на кнопку удалить хотелось бы удалить строку

Как мне реализовать удаление при нажатии на кнопку "Удалить" используя событие SelectionChanged


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

Автор решения: Bulson
public partial class MainWindow : Window
{
    private const string _conString = @"Data Source=(localdb)\MSSQLLocalDB;" +
                                      "Initial Catalog=DatabaseOneTable;" +
                                      "Integrated Security=True;";
    private const string _selectString = "SELECT * FROM People";
    private readonly DataTable _dataTable;


    public MainWindow()
    {
        InitializeComponent();

        _dataTable = new DataTable();
        this.Loaded += MainWindow_Loaded;
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        try
        {
            using (var adp = new SqlDataAdapter(_selectString, _conString))
            {
                //читаем данные заполняем данными таблицу
                int countRecords = adp.Fill(_dataTable);
                Trace.WriteLine($"Прочитано {countRecords}");
            }

            _dataGrid.ItemsSource = _dataTable.DefaultView;
        }
        catch (Exception ex)
        {
            Trace.WriteLine(ex.Message);
        }

        _buttonRemove.Click += ButtonRemove_Click;
    }

    private void ButtonRemove_Click(object sender, RoutedEventArgs e)
    {
        var row = _dataGrid.SelectedItem as DataRowView;
        if (row == null)
            return;
        //удаляем
        row.Delete();
        try
        {
            //обновляем в БД (команду DELETE строит билдер)
            using (var adp = new SqlDataAdapter(_selectString, _conString))
            using (var cmb = new SqlCommandBuilder(adp))
            {
                var deleted = adp.Update(_dataTable);
                Trace.WriteLine($"Удалено {deleted}");
            }
        }
        catch (Exception ex)
        {
            Trace.WriteLine(ex.Message);
        }
    }
}
→ Ссылка