Реклама:

Такое "равновесие" будет нарушено либо когда в приложении автономные данные снова будут изменены нами в приложении, либо когда другой пользователь изменит данные в самом источнике.

На основании сказанного можно сформулировать ряд узловых моментов, существенных при актуализации в источнике данных тех изменений, которые были внесенны в данные приложении. Мы должны уметь:

• выделить в приложении из всего множества записей только те, которые реально изменялись;

• переносить изменения из приложения в источник;

• отказываться от изменений - полностью или частично;

• должным образом обрабатывать возникающие ошибки.

В настойщей главе рассматривается, как сделать все это.

6.1.1. Изменялись ли записи в наборе

Если хоть одна запись в наборе данных была добавлена, откорректирована или удалена, то метод HasChanges набора данных возвратит значение true. Если ни одна запись набора не изменялась, метод возвратит значения false.

Метод имеет две разновидности. Первая исследует наличие любых изменений:

public bool HasChanges();

в то время как вторая - изменений только определенного вида. Вид изменений задается параметром rowState:

public bool HasChanges( DataRowState rowState );

Перечисление System.Data.DataRowState задает следующие значения (выборочно):

Значение

Описание

Added

Строка добавлена

Deleted

Строка удалена

Modified

Строка изменена

Unchanged

Строка не изменялась

Отметим, что метод HasChanges возвращает значение true до тех пор, пока все измененные записи не будут запомнены в источнике (базе) данных, либо пока изменения во всех записях не будут отменены.

Примеры типичного применения метода:

if (dsVUZ1.HasChanges()) { //---записи изменялись

}

else {

//---никаких изменений

}

if (dsVUZ1.HasChanges(DataRowState.Modified)) { //---есть хотя бы одна откорректированная запись

}

else {

//---значения столбцов ни одной записи не изменялись

}

_I

6.1.2. Изменялась ли строка данных

Для того чтобы определить, изменялась ли конкретная строка, можно использовать свойство объекта DataRow:

public DataRowState RowState {get;}

Свойство возвращает значения перечисления System.Data.DataRowState. Они рассматривались в предыдущем разделе.

Пример. В информационном окне вывести сведения о том, какие изменения произведены во второй строке таблицы Kaf набора данных dsVUZ1.

string sRowState = "";

switch (dsVUZ1.Kaf[1].RowState) {

case DataRowState.Added :

sRowState = "Запись добавлена"; break;

case DataRowState.Deleted :

sRowState = "Запись удалена"; break;

case DataRowState.Modified :

sRowState = "Запись изменена"; break;

case DataRowState.Unchanged :

sRowState = "Запись не изменялась"; break;

}

MessageBox.Show(sRowState);

_I

Отметим, что строка, если строка в приложении добавлена, удалена или изменена, находится в состоянии, отличном от Unchanged, до тех пор, пока ее изменение либо не актуализируют (не запомнят) в источнике данных, либо не отменят методом RejectChanges объектов DataRow, DataTable или DataSet.

6.1.3. Получение измененных записей таблицы данных


⇐ Предыдущая страница| |Следующая страница ⇒