![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| VSH |
|
|||
|
Unregistered |
Проблема в том, что при редактировании данных в ячейке и нажатии Enter - DBGridC.SelectedField.OldValue и DBGridC.SelectedField.Value равны.
Различными они становятся после DataSourceC.DataSet.UpdateRecord, и то на отдельной кнопке. При попытке обновления записи на событиях ячейки вызывает ошибку. Может я не в тех событиях делаю Update? Также различными становятся OldValue и Value при переходе в другую ячейку, но при нажатии клавиши Enter фокус остаётся в той же ячейке.. Что делать? Как культурно определить, изменялись ли данные в гриде? |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
как гласит F1,
на самом деле вариантов масса. один из самых простых: выставлять флаг типа gdModified в FALSE, а в OnFieldChange, например, поднимать его в TRUE. это позволит отследить изменение определённого поля. если нужно отслеживать изменение всей таблицы, можно перехватывать AfterPost и AfterDelete TTable/TQuery. эти два обработчика будут охватывать INSERT, UPDATE и DELETE. можно выдумать и другие варианты. Это сообщение отредактировал(а) x77 - 4.9.2003, 16:12 -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| pigas |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 29.4.2003 Репутация: нет Всего: нет |
Если у тебя вся прога состоит только из грида и кнопок то можно запоминать нажатия клавиш в гриде ....
Но обычно делаютя варианты для юзеров менять данные вне грида и тогда логично запомить изменения dataseta для чего у него есть соответст события ( до / после ) Update это не обновление записи в гриде а изменение dataset ! рефреш = это обновление ... вероятно поэтому и ошибка . |
|||
|
||||
| VSH |
|
|||
|
Unregistered |
pigas
Точно, сделал так (на OnKeyPress Update и Refresh не нужны): procedure TMainForm.DBGridCKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin if DBGridC.SelectedField.OldValue<>DBGridC.SelectedField.Value then begin DataSetC.Post; GridChange:= GridChange+1; //Глобальная переменная end; end; end; |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |