Приветствую всех! Часто на просторах интернета встречал вопрос, как сохранить изменения в базе данных. Тут все легко вызываем на адаптере метод Update(); и передаем ему в качестве параметров таблицу либо, DataSet. Выглядеть это может следующим образом:
TableAdapter.Update(dataSet);
Однако ситуация меняется кардинально если у нас DataGridView связан с БД и допустим с TextBox в котором мы производим изменения, для последующего сохранения данных. Связка происходит по средствам BindingSource.
Рассмотрим простой пример привязки данных DataGridView к БД и TextBox c БД для изменения информации и сохранения ее.

Как видите я разместил на форме Button, все остальные компоненты будут добавлены позже. Так же нам необходимо создать БД в проекте, в которой создадим таблицу, а в ней две колонки ID и Имя. Внесем несколько записей в БД. У меня получилось следующее:


После создания и внесение данных обновляем, сохраняем все. На этом этапе мы имеет БД с информацией, и приложение с компонентами на форме. Следующим этапом будет привязка компонента DataGridView к БД.
Для этого мы открываем в Visual Studio окно «Источники данных» или используем горячие клавиши зажав Shift_Alt+D

Далее у нас откроется мастер настройки источника данных. Повторяем все действия показанные на изображения ниже:






В данных настройках мы выбираем компонент который хотим связать с нашей БД и зажимая кнопкой мыши перетаскиваем его на форму нашего приложения. Для TextBox это будет «Сведения» После проведения все выше перечисленных манипуляций у нас должно получиться следующее.

Теперь выбирая имя в DataGridView у нас выводит информацию в TextBox. В которой мы хотим реализовать возможность редактирования информации. Перейдя к событию мыши Click напишем следующий код:
Стоит так же отметить что у нас с генерировался и дополнительный код, в том числе и в главной форме.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Связка_данных_TextBox_и_DataGrid_с_БД
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
tableBindingSource.EndEdit();
tableTableAdapter.Update(database1DataSet);
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: данная строка кода позволяет загрузить данные в таблицу "database1DataSet.Table". При необходимости она может быть перемещена или удалена.
this.tableTableAdapter.Fill(this.database1DataSet.Table);
}
}
}
Суть сохранения изменений сводится к тому что надо завершать изменения в BindingSource вызывая метод EndEdit(); а уже после вызывать метод Update(); на адаптере.
В итоге у нас получилось полноценное приложение WinForm написано на C#. Пример демонстрирует то как можно легко создать приложение для работы с базой данных, реализовать привязку БД к DataGridView и TextBox. И возможность сохранят изменения в базе данных.

Привет! Не сохраняет, в чём может быть дело?
Без студии, запустить программу, и произведите сохранения.
Как говорится «сосите лямки от кальсон!»
Не работает у меня ваша схема, пишет что
System.InvalidOperationException: «Для обновления требуется действительный UpdateCommand при передаче коллекции DataRow с измененными строками.»
Потому что, вы не совсем понимаете, что делаете, не надо вносить изменения в генерированный код студии.
Ничего не сохраняет и ошибок не выдает. Все сделал как по инструкции.
Справами админа студию запустите, если не помогло то смотрите в код.
Боже, спасибо, помог, а то что я только не менял/добавлял в коде, чтобы получилось
Пожалуйста)
Была такая же проблема. Решение оказалось довольно простым.
Нужно зайти в «Обозреватель решений», там найти свою базу данных, далее зайти в свойства и в пункте «Копировать в выходной каталог» выбрать «Копировать более позднюю версию»
Bid senqiu