Опубликован: 09.09.2008 | Доступ: свободный | Студентов: 2107 / 346 | Оценка: 4.30 / 4.12 | Длительность: 08:30:00
ISBN: 978-5-94774-601-3
Самостоятельная работа 10:

Модификация, вставка и удаление записей в наборе данных

Добавление данных

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

  1. Создать новую строку
    DataRow rowEmployee = this.dsEmployee.Employee.NewEmployeeRow();
  2. Сформировать начальные значения для элементов строки
    rowEmployee["JobRoleID"] = 1;
    rowEmployee["EmployeeStatus"] = 0;
    rowEmployee["EmployeeSurname"] = "";
    rowEmployee["EmployeeName"] = "";
    rowEmployee["EmployeePatronymic"] = "";
    rowEmployee["Access"] = "не задано";
  3. Добавить сформированную строку к таблице Employee
    dsEmployee.Employee.Rows.Add(rowEmployee);
  4. Установить активную позицию в таблице Employee на добавленную строку
    int pos = this.dsEmployee.Employee.Rows.Count - 1;
    this.BindingContext[dsEmployee, "Employee"].Position = pos;
  5. Задать режим редактирования формы
    DisplayForm(false);
  6. Сделать список сотрудников недоступным для выбора
    listBoxEmployee.Enabled = false;
  7. Установить фокус на элементе textBoxSurname
    textBoxSurname.Focus();

После задания данных по новому сотруднику необходимо их запомнить в базе данных. Для этого требуется модифицировать метод Save, добавив в него фрагмент кода для вставки новых записей перед кодом, модифицирующим записи.

/// Формирование таблицы, в которую включаются только добавленные строки
DataSetEmployee.EmployeeDataTable ds2 = (DataSetEmployee.EmployeeDataTable)dsEmployee.Employee.
GetChanges(DataRowState.Added);
if(ds2 != null)
   try
   {
    daEmployee.Update(ds2);
    ds2.Dispose();
     dsEmployee.Employee.AcceptChanges( );
   }
   catch(Exception x)
    {
     string mes = x.Message;
    MessageBox.Show("Ошибка вставки записи в базу данных Employee "+mes, "Предупреждение");
    this.dsEmployee.Employee.RejectChanges();
   }

В добавляемом фрагменте проверяется наличие в таблице Employee добавленных строк

ds2 != null

и если они имеются, то производится попытка модифицировать базу данных

daEmployee.Update(ds2);

При вставке новых записей в базу данных метод Update адаптера daEmployee вызывает SQL команду INSERT, которая была сформирована при генерации адаптера. Если первичный ключ таблицы базы данных является суррогатным и генерируется сервером автоматически (задано свойство IDENTITY ), которое корректируется в DataSet.

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

Удаление данных

Удаление записи с данными по сотруднику в приложении реализуется методом Remove. В процессе удаления записей по сотрудника используется модальное диалоговое окно для вывода сообщения (см. "Создание пользовательских диалоговых окон" ), вид которого представлен на рисунке 10.2, для предупреждения пользователя при проведении операции.

Диалоговое окно предупреждения пользователя.

Рис. 10.2. Диалоговое окно предупреждения пользователя.

При выборе пункта меню Действие/Удалить формируется событие, которое обрабатывается методом toolStripButtonRemove_Click. Обработчик вызывает метод Remove, который выполняет удаление данных по сотруднику. В методе Remove определяется позиция, которую необходимо удалить в таблице Employee

int pos = -1;
pos = this.BindingContext[dsEmployee, "Employee"].Position;

Затем формируется строка с фамилией, именем и отчеством, удаляемого сотрудника

string mes = textBoxSurname.Text.ToString().Trim() + " " 
  + textBoxName.Text.ToString().Trim() + " " +
  textBoxPatronymic.Text.ToString().Trim();

и выводится сообщение в диалоговом окне

MessageBox.Show(" Удалить данные  \n по сотруднику \n"+ mes+ "?", "Предупреждение", 
  MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);

Далее в зависимости от того, какую кнопку нажал пользователь, осуществляется удаление записи. Если пользователь нажал кнопку "Да", то необходимо выполнить следующий код:

this.dsEmployee.Employee.Rows[pos].Delete();
if (this.dsEmployee.Employee.GetChanges(DataRowState.Deleted) != null)
{
  try
  {
    this.daEmployee.Update(dsEmployee.Employee);
    this.dsEmployee.Employee.AcceptChanges();
  }
  catch (Exception x)
  {
    string er = x.Message.ToString();
    MessageBox.Show("Ошибка удаления записи в базе данных Employee " + er, "Предупреждение");
    this.dsEmployee.Employee.RejectChanges();
  }
}

При нажатии кнопки "Нет", то необходимо выполнить код:

this.dsEmployee.Employee.RejectChanges();

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

Отмена изменений

Отмена модификации записи с данными по сотруднику в приложении реализуется методом Undo. При отмене изменений необходимо завершить текущие обновления связанных элементов управления

bmEmployee.EndCurrentEdit();

и с помощью метода RejectChanges отменить изменения в источнике данных

dsEmployee.Employee.RejectChanges();

Далее необходимо задать режим "только для чтения", выбор строки в списке сотрудников listBoxEmployee и установить фокус на форме.

Задание на лабораторную работу

  1. Изучите теоретический материал.
  2. Разработайте методы для модификации, формирования, удаления и сохранения данных по сотрудникам.
  3. Разработайте метод для отмены модификации данных по сотрудникам.
  4. Протестируйте приложение.
Анна Иваненко
Анна Иваненко

В самостоятельной работе 8 написано: "В пункте "Server name" задаем имя сервера, которое необходимо узнать у преподавателя". Где узнать это имя?

Вячеслав Шестивский
Вячеслав Шестивский

Вроде всё выставил верно, но при клике на "Сотрудники", меню из FormEmplyee не вставляется в меню главного окна а висит в дочернем окне снизу.  Как поправить?