- •Лабораторная работа 4 Работа с бд в с#
- •Основные сведения
- •Задание на лабораторную работу
- •Часть 2. Модификация, вставка и удаление записей в наборе данных
- •Основные концепции обновления наборов данных в Microsoft .Net
- •Модификация, вставка и удаление записей в наборе данных
- •Модификация данных
- •Сохранение данных
- •Удаление данных
- •Добавление данных
- •Отмена изменений
- •Задание на лабораторную работу
Модификация данных
Модификация данных в приложении реализуется методом Edit. Для модификации данных необходимо для элементов контроля задать режим редактирования, вызвав метод DisplayEdit и запретить доступ к списку сотрудников в элементе listBoxEmployee. Активизация режима модификации данных по сотруднику осуществляется из пункта меню Действие/Изменить.
private void Edit ( )
{
DisplayForm (false);
this.listBoxEmployee.Enabled = false;
}
При проектировании приложения использовалась технология привязки источника ( DataSet ) данных к элементам управления ( TextBox, ListBox, ComboBox ). При выводе данных на экранную форму проведенная привязка обеспечивала корректность работы приложения. При модификации данных в элементах контроля для текстового поля TextBox механизм связывания автоматически поддерживает синхронизацию между элементом контроля и источником данных. Для списка ComboBox необходимо использовать событие SelectionChangeCommitted, которое им генерируется, когда пользователь изменяет выбранный элемент и подтверждает его изменение. Обработчик этого события принимает аргумент EventArgs. Этот обработчик целесообразно использовать для получения нового значения из ComboBox, когда пользователь его изменит. Для элементов управление обработчики события SelectionChangeCommitted представлены ниже:
private void comboBoxJobRole_SelectionChangeCommitted(object sender, System.EventArgs e)
{
// Определяем позицию в таблице Employee
int pos = -1;
pos = this.BindingContext[dsEmployee1,
"Employee"].Position;
// Изменение в таблице Employee поля JobRoleID при изменении
// выбора должности (comboBoxJobRole)
dsEmployee1.Employee[pos].JobRoleID =
(short)((DataRowView)comboBoxJobRole.Items[comboBoxJobRole.SelectedIndex])
["JobRoleID"];
}
private void comboBoxAccess_SelectionChangeCommitted(object sender, System.EventArgs e)
{
int pos = -1;
pos = this.BindingContext[dsEmployee1,
"Employee"].Position;
dsEmployee1.Employee[pos].Access =
comboBoxAccess.SelectedItem.ToString();
}
private void comboBoxStatus_SelectionChangeCommitted(object sender, System.EventArgs e)
{
int pos = -1;
pos = this.BindingContext[dsEmployee1,
"Employee"].Position;
dsEmployee1.Employee[pos].EmployeeStatus =
comboBoxStatus.SelectedIndex;
}
Далее можно изменять данные по сотруднику на форме. После изменения данных необходимо сохранить сделанные изменения.
Сохранение данных
Сохранение данных в приложении реализуется методом Save, который активизируется при выборе пункта меню Действие/Сохранить. Для сохранения модифицированной информации в приложении необходимо вначале завершить текущее обновление всех связанных с помощью объектов Binding элементов управления Windows Forms и источника данных. Для этого необходимо вызвать метод EndCurrentEdit класса BindingManagerBase:
bmEmployee.EndCurrentEdit( )
Далее формируется таблица ds1, в которую включаются только модифицированные строки:
DataSetEmployee.EmployeeDataTable ds1 = (DataSetEmployee.EmployeeDataTable)dsEmployee.Employee.
GetChanges(DataRowState.Modified);
Если таблица ds1 не пуста (условие - ds1 != null ) осуществляется попытка обновления базы данных с помощью метода Update адаптера daEmployee и далее уничтожается таблица ds1. Если обновить базу данных не удается, то формируется сообщение об ошибке:
if(ds1 != null)
try
{
this.daEmployee.Update(ds1);
ds1.Dispose( );
dsEmployee.Employee.AcceptChanges();
}
catch(Exception x)
{
string mes = x.Message;
MessageBox.Show("Ошибка обновления базы данных Employee "+mes, "Предупреждение");
this.dsEmployee.Employee.RejectChanges();
}
При завершении алгоритма обновления форма FormEmployee переводится в режим "только для чтения" с помощью метода DisplayReadOnly и фокус должен быть на элементе управления textBoxSurname.
Полный текст модифицированного метода Save приведен далее:
private void Save()
{
string mes = "";
// Завершение текущих обновлений всех связанных с помощью
// объектов Binding элементов управления
bmEmployee.EndCurrentEdit();
///Формирование таблицы, в которую включаются только
// модифицированные строки
DataSetEmployee.EmployeeDataTable ds1 = (DataSetEmployee.EmployeeDataTable)dsEmployee.Employee.
GetChanges(DataRowState.Modified);
if(ds1 != null)
try
{
this.daEmployee.Update(ds1);
ds1.Dispose( );
dsEmployee.Employee.AcceptChanges();
}
catch(Exception x)
{
string mes = x.Message;
MessageBox.Show("Ошибка обновления базы данных Employee "+mes, "Предупреждение");
this.dsEmployee.Employee.RejectChanges();
}
DisplayForm(true);
listBoxEmployee.Enabled = true;
textBoxSurname.Focus();
}
Протестируйте добавленный в программу код.
