Лучший отвечающий
WPF + MS SQL Server обновление БД из DataGrid

Вопрос
-
Добрый день,
Подскажите пожалуйста, как можно реализовать редактирование данных в DataGrid , и записать изменения в базу MS SQL Server при завершении редактирования ячейки DataGrid? Буду признателен за пример.
- Изменено LDN_Kyiv 27 марта 2019 г. 15:44
27 марта 2019 г. 15:42
Ответы
-
Посмотрите, например, это руководство: https://docs.microsoft.com/en-us/ef/ef6/fundamentals/databinding/wpf
Спасибо, посмотрел, полезная инфо, но для моего проекта не совсем подходит. И много "танцев с бубном" - это мое личное мнение.
Нашел более элегантный способ представить данные из БД в DataGrid с возможностью редактирования и внесения этих правок в БД.
Вместо DataTable использовал DataSet для представления данных в гриде.
string connectionString = @"DataSource=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True"; string sql = "SELECT * FROM Users"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // Создаем объект DataAdapter SqlDataAdapter adapter = new SqlDataAdapter(sql, connection); // Создаем объект Dataset DataSet ds = new DataSet(); // Заполняем Dataset adapter.Fill(ds); // Отображаем данные myDataGrid.ItemsSource = ds.Tables[0].DefaultView;
Для модификации данных в БД в соответствии с изменениями в DataSet
SqlDataAdapter
использует командыInsertCommand
,UpdateCommand
иDeleteCommand - то что и мне требовалось.
Мы можем сами определить для этих команд sql-выражения, либо мы можем воспользоваться классом SqlCommandBuilder, который позволяет автоматически сгенерировать нужные выражения. Я воспользовался данным класом.
// создаем объект SqlCommandBuilder SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter); // заново получаем данные из БД adapter.Update(ds); // очищаем полностью DataSet ds.Clear(); // перезагружаем данные adapter.Fill(ds); // отображаем обновленную таблицу myDataGrid.ItemsSource = ds.Tables[0].DefaultView;
Правки в таблице можем обновлять или нажатием кнопки или по завершению редактирования ячейки, или другими событиями, которые будут на гриде.
Моей целью было - обновление данных таблице без использования button-ов, по типу Excel, только с автоматическим обновлением информации в БД.
- Помечено в качестве ответа LDN_Kyiv 4 апреля 2019 г. 9:42
4 апреля 2019 г. 9:40
Все ответы
-
Посмотрите, например, это руководство: https://docs.microsoft.com/en-us/ef/ef6/fundamentals/databinding/wpf
- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 28 марта 2019 г. 8:53
28 марта 2019 г. 5:52 -
Посмотрите, например, это руководство: https://docs.microsoft.com/en-us/ef/ef6/fundamentals/databinding/wpf
Спасибо, посмотрел, полезная инфо, но для моего проекта не совсем подходит. И много "танцев с бубном" - это мое личное мнение.
Нашел более элегантный способ представить данные из БД в DataGrid с возможностью редактирования и внесения этих правок в БД.
Вместо DataTable использовал DataSet для представления данных в гриде.
string connectionString = @"DataSource=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True"; string sql = "SELECT * FROM Users"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // Создаем объект DataAdapter SqlDataAdapter adapter = new SqlDataAdapter(sql, connection); // Создаем объект Dataset DataSet ds = new DataSet(); // Заполняем Dataset adapter.Fill(ds); // Отображаем данные myDataGrid.ItemsSource = ds.Tables[0].DefaultView;
Для модификации данных в БД в соответствии с изменениями в DataSet
SqlDataAdapter
использует командыInsertCommand
,UpdateCommand
иDeleteCommand - то что и мне требовалось.
Мы можем сами определить для этих команд sql-выражения, либо мы можем воспользоваться классом SqlCommandBuilder, который позволяет автоматически сгенерировать нужные выражения. Я воспользовался данным класом.
// создаем объект SqlCommandBuilder SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter); // заново получаем данные из БД adapter.Update(ds); // очищаем полностью DataSet ds.Clear(); // перезагружаем данные adapter.Fill(ds); // отображаем обновленную таблицу myDataGrid.ItemsSource = ds.Tables[0].DefaultView;
Правки в таблице можем обновлять или нажатием кнопки или по завершению редактирования ячейки, или другими событиями, которые будут на гриде.
Моей целью было - обновление данных таблице без использования button-ов, по типу Excel, только с автоматическим обновлением информации в БД.
- Помечено в качестве ответа LDN_Kyiv 4 апреля 2019 г. 9:42
4 апреля 2019 г. 9:40