Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Обновление строк

Обновление строк

Еще одной операцией, которую вы должны освоить, является изменение значений существующей в DataTable строки. С этой целью можно, например, сначала c помощью метода Select() получить строку, соответствующую имеющемуся критерию фильтра. Имея соответствующий объект DataRow, вы можете соответствующим образом его изменить. Предположим, что в форме есть кнопка (тип Button). при щелчке на которой выполняется поиск тех строк в объекте DataTable, для которых Make равно BMW. Идентифицировав эти элементы, вы изменяете значение Make с BMW на Colt.

// Поиск строк для редактирования с помощью фильтра.
private void btnChangeBeemersToColts_Click(object sender, EventArgs e) {
 // Проверка вменяемости пользователя.
 if (DialogResult.Yes == MessageBox.Show("Вы уверены?? BMW намного лучше, чем Colt!", "Подтвердите свой выбор!", MessageBoxButtons.YesNo)) {
  // Построение фильтра.
  string filterStr = "Make='BMW'";
  string strMake = null;
  // Поиск строк, соответствующих критериям фильтра.
  DataRow[] makes = inventoryTable.Select(filterStr);
  // Замена бумеров на кольты!
  for (int i = 0; i ‹ makes.Length; i++) {
   DataRow temp = makes[i];
   strMake += temp["Make"] = "Colt";
   makes[i] = temp;
  }
 }
}

Класс DataRow предлагает методы BeginEdit(), EndEdit() и CancelEdit(), которые позволяют редактировать содержимое строки, временно приостанавливая все заданные условия проверки ввода. При использовании предложенной выше программной логики строка будет проверяться с каждым новым присваиванием. (И если вы задали обработку каких-то событий DataRow, они тоже будут генерироваться с каждой модификацией.) При вызове BeginEdit() для DataRow строка переводится в режим редактирования. Вы получаете возможность внести любые необходимые вам изменения, чтобы затем вызывать EndEdit() и зафиксировать эти изменения или CancelEdit() и выполнить откат к оригинальной версии данных, например:

private void UpdateSomeRow() {
 // Предполагается, что строка для редактирования уже получена.
 // Выполняется перевод этой строки в режим редактирования.
 rowToUpdate.BeginEdit();
 // Отправка строки вспомогательной функции, возвращающей Boolean.
 if (ChangeValuesForThisRow(rowToUpdate)) rowToUpdate.EndEdit(); // OK!
 else rowTaUpdate.CancelEdit(); // Забудьте об этом.
}

Вы, конечно, можете вызывать эти методы для данного DataRow и вручную, но они вызываются автоматически при редактировании элемента DataGridView, связанного с DataTable. Например, при выборе строки в DataGridView эта строка автоматически переводится в режим редактирования. А при перемещении фокуса ввода в новую строку автоматически вызывается EndEdit().

Оглавление книги


Генерация: 2.452. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз