Kак сохранить изменения в DataGrid VC#?
Доброй ночи! Вытащил из базы данные в колоночку. Все круто отображается. Но после редактирования — не сохраняется естественно. Как на примере моего кода реализовать что-то вроде DbDataAdapter.Update (DataTable) чтобы поставить кнопочку ЗАСЕЙВИТЬ и естественно все изменения, добавления и удаляния сейвились в MySQL. Вот код:
private DataTable GetCats() < DataTable dt = new DataTable(); MySqlConnectionStringBuilder mysqlCSB; mysqlCSB = new MySqlConnectionStringBuilder(); mysqlCSB.Server = textBox1.Text; mysqlCSB.Database = textBox2.Text; mysqlCSB.UserID = textBox3.Text; mysqlCSB.Password = textBox4.Text; string queryString = @"SELECT blablabla FROM blablabla WHERE blabla IN (SELECT blabla FROM blablabla WHERE blablabla='blablabla')"; using (MySqlConnection con = new MySqlConnection()) < con.ConnectionString = mysqlCSB.ConnectionString; MySqlCommand com = new MySqlCommand(queryString, con); try < con.Open(); using (MySqlDataReader dr = com.ExecuteReader()) < if (dr.HasRows) < dt.Load(dr); >> > catch (Exception ex) < MessageBox.Show(ex.Message); >> return dt; >
- Вопрос задан более трёх лет назад
- 483 просмотра
Как сохранить изменения datagrid в mysql
Данное руководство устарело. Актуальное руководство: по ADO.NET и работе с базами данных в .NET 6
Последнее обновление: 31.10.2015
Ранее мы рассмотрели, как удобно загружать данные в приложении Windows Forms в элемент DataGridView через DataSet. Теперь определим полнофункциональную форму, через которую мы сможем производить все стандартные CRUD операции в базе данных.
Итак, определим форму, на которой будет элемент DataGridView и три кнопки для добавления, удаления и сохранения изменений. Форма в итоге будет выглядеть примерно следующим образом:

Код формы будет выглядеть следующим образом:
using System; using System.Data; using System.Windows.Forms; using System.Data.SqlClient; namespace AdoNetWinFormsApp < public partial class Form1 : Form < DataSet ds; SqlDataAdapter adapter; SqlCommandBuilder commandBuilder; string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True"; string sql = "SELECT * FROM Users"; public Form1() < InitializeComponent(); dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView1.AllowUserToAddRows = false; using (SqlConnection connection = new SqlConnection(connectionString)) < connection.Open(); adapter = new SqlDataAdapter(sql, connection); ds = new DataSet(); adapter.Fill(ds); dataGridView1.DataSource = ds.Tables[0]; // делаем недоступным столбец id для изменения dataGridView1.Columns["Id"].ReadOnly = true; >> // кнопка добавления private void addButton_Click(object sender, EventArgs e) < DataRow row = ds.Tables[0].NewRow(); // добавляем новую строку в DataTable ds.Tables[0].Rows.Add(row); >// кнопка удаления private void deleteButton_Click(object sender, EventArgs e) < // удаляем выделенные строки из dataGridView1 foreach(DataGridViewRow row in dataGridView1.SelectedRows) < dataGridView1.Rows.Remove(row); >> // кнопка сохранения private void saveButton_Click(object sender, EventArgs e) < using (SqlConnection connection = new SqlConnection(connectionString)) < connection.Open(); adapter = new SqlDataAdapter(sql, connection); commandBuilder = new SqlCommandBuilder(adapter); adapter.InsertCommand = new SqlCommand("sp_CreateUser", connection); adapter.InsertCommand.CommandType = CommandType.StoredProcedure; adapter.InsertCommand.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar, 50, "Name")); adapter.InsertCommand.Parameters.Add(new SqlParameter("@age", SqlDbType.Int, 0, "Age")); SqlParameter parameter = adapter.InsertCommand.Parameters.Add("@Id", SqlDbType.Int, 0, "Id"); parameter.Direction = ParameterDirection.Output; adapter.Update(ds); >> > >
Здесь для добавления объекта мы будем обращаться к хранимой процедуре sp_CreateUser, которая была добавлена в базу данных в прошлой теме.
В конструкторе данные загружаются в DataSet, первая таблица которого устанавливается в качестве источника данных для dataGridView1:
dataGridView1.DataSource = ds.Tables[0];
Также в конструкторе устанавливается полное выделение строки и запрет на ручное добавление новых строк:
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView1.AllowUserToAddRows = false;
В обработчике кнопки добавления создается новая строка, которая добавляется в таблицу объекта DataSet. И так как мы ранее установили привязку к источнику данных, то автоматически новая строка также будет добавляться и в dataGridView1:
private void addButton_Click(object sender, EventArgs e) < DataRow row = ds.Tables[0].NewRow(); // добавляем новую строку в DataTable ds.Tables[0].Rows.Add(row); >
В обработчике кнопки удаления удаляются выделенные строки в dataGridView1. Опять же в силу привязки к источнику данных будет также происходить удаление и из таблицы в DataSet:
private void deleteButton_Click(object sender, EventArgs e) < foreach(DataGridViewRow row in dataGridView1.SelectedRows) < dataGridView1.Rows.Remove(row); >>
Для обновления на не нужна никакая кнопка, так как мы можем нажать на любую ячейку таблицы (кроме заблокированного для изменения столбца Id) и изменить в ней данные. Однако сами по себе добавление новой строки, удаление строк, изменение ячеек ни как автоматически не отразятся на базе данных. И чтобы бд синхронизировалась, пользователю надо будет нажать на кнопку сохранения, обработчик которой выглядит следующим образом:
private void saveButton_Click(object sender, EventArgs e) < using (SqlConnection connection = new SqlConnection(connectionString)) < connection.Open(); adapter = new SqlDataAdapter(sql, connection); commandBuilder = new SqlCommandBuilder(adapter); adapter.InsertCommand = new SqlCommand("sp_CreateUser", connection); adapter.InsertCommand.CommandType = CommandType.StoredProcedure; adapter.InsertCommand.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar, 50, "Name")); adapter.InsertCommand.Parameters.Add(new SqlParameter("@age", SqlDbType.Int, 0, "Age")); SqlParameter parameter = adapter.InsertCommand.Parameters.Add("@Id", SqlDbType.Int, 0, "Id"); parameter.Direction = ParameterDirection.Output; adapter.Update(ds); >>
Как в прошлой теме здесь устанавливается у адаптера команда на добавление InsertCommand и затем вызывается метод Update() . В итоге мы можем добавить несколько строк, удалить, изменить, и потом один раз мы нажмем на кнопку, и все изменения будут применены к базе данных.
Сохранение массива datagridview в базу MySQL
Есть заполняющаяся таблица datagridviwe. c 5 столбцами код,названия,количество,ценаза1,оплата..
как все данные занесенные в таблицу,нажатием кнопки перенести в базу Mysql
просьба показать как это будет выглядеть с подключением к базе. Желательно пример. Предыдущий ответ не понятен .
Добавлено через 3 часа 8 минут
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
//здесь функция добавления значений в БД, допустим void insrt(string zapros); for (int z = 0; z dataGridView1.Rows.Count; z++) { try { using (MySqlConnection connection = new MySqlConnection(@"Database=dostavka; Data Source=localhost; User >)) { MySqlCommand command = new MySqlCommand("INSERT INTO zakaz VALUES(@id_zakaz, @bludo_name, @bludo_kol, @bludo_cena,@bludo_oplata)", connection); command.Parameters.AddWithValue("@id_zakaz", dataGridView1.Rows[z].Cells[0].Value); command.Parameters.AddWithValue("@bludo_name", dataGridView1.Rows[z].Cells[1].Value); command.Parameters.AddWithValue("@bludo_kol", dataGridView1.Rows[z].Cells[2].Value); command.Parameters.AddWithValue("@bludo_cena", dataGridView1.Rows[z].Cells[3].Value); command.Parameters.AddWithValue("@bludo_oplata", dataGridView1.Rows[z].Cells[4].Value); command.Connection.Open(); command.ExecuteNonQuery(); } } catch { } }
Работа с базой данных в приложении: чтение, добавление, редактирование, удаление данных (часть 1)
Object-oriented programming (объектно-ориентированное программирование). Методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования
Structured Query Language (язык структурированных запросов). Декларативный язык программирования, применяемый для создания, модификации и управления данными в реляционной базе данных, управляемой соответствующей системой управления базами данных
Entity Framework. Объектно-ориентированная технология доступа к данным
Pattern. Повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста
Видеолекция
Тему работы с базой данных в приложении будем рассматривать на примере отображения, добавления, редактирования и удаления данных. Для отображения определенных данных система обращается к базе данных, получает ответ, а затем преобразует его в удобный для пользователя вид, который настраивает разработчик. Для работы с базой данных в приложении мы будем использовать Entity Framework, который позволяет работать с базой данных через объектно-ориентированный подход. Он предоставляет ряд существенных преимуществ: вам не нужно беспокоиться о коде доступа к данным, а также знать детали работы СУБД SQL Server и синтаксиса языка структурированных запросов SQL. Вместо этого вы работает с таблицами базы данных как с классами С#, а с полями этих таблиц, как со свойствами классов, используя вместо SQL запросов более удобный подход — LINQ. Entity Framework берет на себя обязанности по преобразованию кода C# в SQL инструкции