Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по C#_Часть1.doc
Скачиваний:
92
Добавлен:
19.08.2019
Размер:
2.54 Mб
Скачать
      1. Удаление строк из объекта DataTable

Для удаления объекта DataRow из объекта DataTable служат два метода: метод Remove объекта DataRowCollection и метод Delete объекта DataRow. Метод Remove удаляет объект DataRow из коллекции DataRowCollection, тогда как метод Delete только помечает строку для удаления. Фактическое удаление происходит, когда в приложении вызывается метод AcceptChanges. Использование метода Delete позволяет программно проверять, какие строки помечены для удаления, перед их фактическим удалением. Когда строка отмечена для удаления, ее свойство RowState имеет значение Deleted.

Чтобы удалить записи из таблицы данных необходимо вызвать метод Delete объекта DataRow.

БД.Таблица.Rows[№_строки].Delete();

Внимание. Данный метод не удаляет записи физически; вместо этого он помечает записи для удаления.

Если до метода AcceptChanges вызвать метод RejectChanges, то состояние RowState строки возвращается к тому значению, которое оно имело до того, как строка была помечена как Deleted.

Примечание Если состояние RowState объекта DataRow имеет значение Added, означающее, что она недавно была добавлена в таблицу, и затем она помечается как Deleted, то строка удаляется из таблицы.

При использовании метода Remove для удаления строки она полностью удаляется из таблицы, однако объект DataAdapter не удаляет строку в источнике данных.

Метод Remove объекта DataRowCollection получает объект DataRow в качестве аргумента и удаляет его из коллекции, как показано в следующем примере.

БД.Таблица.Rows.Remove(DataRow);

Пример. В учебной базе данных необходимо удалить текущую запись:

Для решения этой задачи необходимо прописать код, аналогичный следующему:

private void button1_Click(object sender, EventArgs e)

{

SotrudnicDataSet1.workerRow rw= sotrudnicDataSet1.worker.FindBypasportwork(Convert.ToInt32(textBox2.Text), allDataGridView.CurrentRow.Cells[4].Value.ToString());

SotrudnicDataSet1.personRow rp = sotrudnicDataSet1.person.FindBypasport(Convert.ToInt32(textBox2.Text));

DataRow[] rws;

rws = sotrudnicDataSet1.Tables["worker"].Select("pasport =" + textBox2.Text);

if (rws.Count() == 1)

{

rw.Delete(); rp.Delete();

}

else rw.Delete();

if (MessageBox.Show("удалить запись?", "Внимание", MessageBoxButtons.OKCancel) == DialogResult.OK)

{

this.Validate();

this.personBindingSource.EndEdit();

this.workerBindingSource.EndEdit();

this.tableAdapterManager.UpdateAll(this.sotrudnicDataSet1);

allTableAdapter.Fill(this.sotrudnicDataSet1.All);

};

Примечание Если получено свойство count объекта DataRowCollection, в итоговом результате будут присутствовать записи, помеченные для удаления. Для получения точного количества только тех записей, которые не были помечены для удаления, можно просмотреть свойства RowState каждой записи в коллекции (записи, отмеченные для удаления, имеют RowState, равный Deleted). Также можно создать представление данных набора данных, которое выполнит фильтрацию на основе состояния строки и получит свойство count непосредственно оттуда.