Технология Microsoft ADO.NET

       

Свойство RowState


При работе с данными приходится постоянно вносить изменения в записи - добавлять, редактировать или удалять. Объект DataRow обладает свойством RowState, позволяющим отслеживать текущий статус строки. Создайте новое приложение, назовите его "RowState". Перетаскиваем на форму элементы RichTextBox, Splitter, DataGrid, устанавливаем для них следующие свойства:

richTextBox1, свойство Значение
Dock Bottom
Text
splitter1, свойство Значение
Dock Bottom
dataGrid1, свойство Значение
Dock Fill

В конструкторе формы мы создаем всего одно поле, затем одну запись, статус которой будем отслеживать:

public Form1() { InitializeComponent(); DataTable dtTours = new DataTable("Туры"); DataColumn IDtour = new DataColumn("Код тура", typeof(Int32)); dtTours.Columns.Add(IDtour); dataGrid1.DataSource = dtTours; DataRow myRow; // Создаем новую, отсоединенную запись myRow = dtTours.NewRow(); richTextBox1.Text += Convert.ToString("Новая запись: " + myRow.RowState); //Добавляем запись в объект DataTable dtTours.Rows.Add(myRow); richTextBox1.Text += Convert.ToString("\nДобавление записи: " + myRow.RowState); //Принимаем все изменения в объекте DataTable dtTours.AcceptChanges(); richTextBox1.Text += Convert.ToString("\nМетод AcceptChanges: " + myRow.RowState); //Редактируем запись myRow["Код тура"] = 1; richTextBox1.Text += Convert.ToString("\nРедактирование строки: " + myRow.RowState); //Удаляем строку myRow.Delete(); richTextBox1.Text += Convert.ToString("\nУдаление: " + myRow.RowState); //Отменяем все изменения в объекте DataTable dtTours.RejectChanges(); richTextBox1.Text += Convert.ToString("\nМетод RejectChanges: " + myRow.RowState); }

Запускаем приложение. В текстовое поле выводится статус записи myRow (рис. 8.18):


Рис. 8.18.  Приложение RowState

Значение Detached означает, что запись не относится к объекту DataTable. После добавления ее статус изменяется на Added - теперь она существует в объекте DataTable, но ее нет в базе данных. Конечно, здесь мы не рассматривали взаимодействие с источником записей, но это же значение будет у записей, добавляемых в DataGrid после вывода данных из базы при наличии подключения. Вызывая метод AcceptChanges объекта DataTable, мы принимаем все изменения, поэтому статус DataRow изменяется на Unchanged - теперь запись считается "своей", она не была изменена после вызова метода. После вызова метода Delete запись помечается удаленной - она еще не полностью удалена, в случае отмены изменений статус будет восстановлен. Действительно, вызывая метод RejectChanges объекта DataTable, мы восстанавливаем запись до состояния Unchanged.

Свойство RowState всегда возвращает отдельное, доступное только для чтения значение. Это свойство используется для поиска записей, соответствующих заданному статусу, а также при передаче изменений в базу данных.

В программном обеспечении к курсу вы найдете приложение RowState (Code\Glava4\ RowState).



Содержание раздела