Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИДПО_ИИИС / Лабораторная работа 4.doc
Скачиваний:
94
Добавлен:
19.05.2015
Размер:
537 Кб
Скачать
☆

Модификация данных

Модификация данных в приложении реализуется методом 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();

}

Протестируйте добавленный в программу код.

Соседние файлы в папке ИДПО_ИИИС