Приветствую всех! Часто на просторах интернета встречал вопрос, как сохранить изменения в базе данных. Тут все легко вызываем на адаптере метод Update(); и передаем ему в качестве параметров таблицу либо, DataSet. Выглядеть это может следующим образом:
1 |
TableAdapter.Update(dataSet); |
Однако ситуация меняется кардинально если у нас DataGridView связан с БД и допустим с TextBox в котором мы производим изменения, для последующего сохранения данных. Связка происходит по средствам BindingSource.
Рассмотрим простой пример привязки данных DataGridView к БД и TextBox c БД для изменения информации и сохранения ее.
Как видите я разместил на форме Button, все остальные компоненты будут добавлены позже. Так же нам необходимо создать БД в проекте, в которой создадим таблицу, а в ней две колонки ID и Имя. Внесем несколько записей в БД. У меня получилось следующее:
После создания и внесение данных обновляем, сохраняем все. На этом этапе мы имеет БД с информацией, и приложение с компонентами на форме. Следующим этапом будет привязка компонента DataGridView к БД.
Для этого мы открываем в Visual Studio окно «Источники данных» или используем горячие клавиши зажав Shift_Alt+D
Далее у нас откроется мастер настройки источника данных. Повторяем все действия показанные на изображения ниже:
В данных настройках мы выбираем компонент который хотим связать с нашей БД и зажимая кнопкой мыши перетаскиваем его на форму нашего приложения. Для TextBox это будет «Сведения» После проведения все выше перечисленных манипуляций у нас должно получиться следующее.
Теперь выбирая имя в DataGridView у нас выводит информацию в TextBox. В которой мы хотим реализовать возможность редактирования информации. Перейдя к событию мыши Click напишем следующий код:
Стоит так же отметить что у нас с генерировался и дополнительный код, в том числе и в главной форме.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
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