Добавление логики управления данными
Мы разобрались как отображать, связывать и редактировать данные. Теперь давайте завершим наш пример и научим приложение записывать сделанные нами изменения обратно в базу данных.
У нас единственным редактируемым полем является описание текущего проекта. Для записи изменений, сделанных в нем, мы воспользуемся методом TableAdapter.Update() для таблицы PROJECT. Добавим элемент Button на нашу форму и в обработчике cсобытия Click напишем следующий код:
private void btnSaveChanges_Click(object sender, EventArgs e) { try { this.pROJECTTableAdapter.Update(this.jobDataSet.PROJECT); MessageBox.Show("Save was successful"); } catch (Exception exception) { MessageBox.Show(exception.Message); } }
Так же неплохо было бы иметь возможность откатить сделанные изменения. Добавим ещё одну кнопку и в обработчике события Click поместим код, который будет отменять все изменения в DataSet, произведенные с момента последнего сохранения:
private void btnUndoChanges_Click(object sender, EventArgs e) { this.jobDataSet.RejectChanges(); //требуется для обновления содержимого TextBox
this.iNTEG36BindingSource.CurrencyManager.Refresh(); }
В процессе написания кода передачи изменений в БД, я столкнулся со следующей проблемой: при редактировании связанных данных через TextBox изменения не передавались в DataSet и метод DataSet.HasChanges() всегда возвращал false. Для решения этой проблемы необходимо в обработчик события TextBox.Validate добавить следующий код:
private void textBox1_Validated(object sender, EventArgs e) { this.iNTEG36BindingSource.EndEdit(); }
Завершенное приложение JobManager доступено в архиве с примерами к статье.