Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 594
Эндрю Троелсен
// Поиск строк для редактирования с помощью фильтра.
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().
Работа с типом DataView
В терминах базы данных
Для иллюстрации добавите к текущему графическому интерфейсу еще один тип DataGridView, назвав его dataGridColtsView и сопроводив поясняющим элементом Label. Затем определите член-переменную coltsOnlyView типа DataView.