Как удалить строку из 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);
}
}
}

