DataGrid, BeforeColUpdate

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Damned
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 24.02.2006 (Пт) 18:45

DataGrid, BeforeColUpdate

Сообщение Damned » 24.02.2006 (Пт) 19:53

Разрулите мне пожалуйста такую ситуацию...

Я хочу сделать в своём гриде проверку на правильность введённого в ячейку значения... Нашёл в MSDN событие BeforeColUpdate, в котором по описанию можно выполнить требуемую проверку:
If DataGrid1.Columns(ColIndex).Value < значение Then ....

Однако, в процессе выяснилось, что DataGrid1.Columns(ColIndex).Value равен содержимому ячейки до её редактирования, а изменённые данные ячейки я смог получить только в событии AfterColUpdate.
Почему так происходит???
А если я изначально выбрал не правильный способ, то подскажите как лучше это сделать???

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.02.2006 (Пт) 22:46

А что ты хочешь?
События Before* предназначены для того, чтобы ты мог отменить ввод при определенных условиях. Но доступа к текущему значению ячейки они не дадут, т.к. текущее значение ячейки еще не было изменено. Это, помоему, очевидно из названия события.
Lasciate ogni speranza, voi ch'entrate.

Damned
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 24.02.2006 (Пт) 18:45

DataGrid, BeforeColUpdate

Сообщение Damned » 24.02.2006 (Пт) 23:49

MSDN гласит, что это событие BeforeColUpdate происходит после завершения редактирования в ячейке, но перед тем как данные будут помещены из этой ячейки в буфер DataGridа.... и далее в тексте: это событие даёт приложению благоприятную возможность для проверки ячейки грида, до того как данные поместяться в буфер... и example:

This example checks to make sure that the value the user has typed in is within a certain range; otherwise it disables the update.

Private Sub DataGrid1.BeforeColUpdate (ColIndex As Long, OldValue As Variant, Cancel As Integer)
If ColIndex = 1 Then
If DataGrid1.Columns(1).Value < Now Then
Cancel = True
MsgBox "You must enter a date that is later than today."
End If
End If
End Sub

т.е. в примере они, якобы, сравнивают с изменённым значением ячейки... хотя у меня всё иначе :(

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.02.2006 (Сб) 0:02

BeforeColUpdate или BeforeUpdate?
Lasciate ogni speranza, voi ch'entrate.

Damned
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 24.02.2006 (Пт) 18:45

DataGrid, BeforeColUpdate

Сообщение Damned » 25.02.2006 (Сб) 0:27

Именно BeforeColUpdate

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.02.2006 (Сб) 7:01

.Columns(ColIndex).Text надо проверять.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Damned
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 24.02.2006 (Пт) 18:45

DataGrid, BeforeColUpdate

Сообщение Damned » 25.02.2006 (Сб) 11:35

пробовал проверять и Text и Value - они идентичны.
И кстати, в синтаксисе :
Private Sub object_BeforeColUpdate ([ index As Integer,] colindex As Integer, oldvalue As Variant, cancel As Integer)

- аргумент OldValue хранит значение ячейки до редактирования на случай восстановления (и он равен *.Text и *.Value). Лично мне этот момент не понятен, где брать нововведённое значение???
Видимо придётся в более поздних событиях искать :(

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.02.2006 (Сб) 11:56

Ну или сервис-пак на VB поставь тогда... Потому что всё нормально работает, а с гридом да, много багов очень пофиксено...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 26.02.2006 (Вс) 14:00

alibek писал(а):А что ты хочешь?
События Before* предназначены для того, чтобы ты мог отменить ввод при определенных условиях. Но доступа к текущему значению ячейки они не дадут, т.к. текущее значение ячейки еще не было изменено. Это, помоему, очевидно из названия события.


Вообще-то в нормальных Grid-ах всегда (из любого события) есть доступ к текущему значению - иначе смысл события просто потеряется...

P.S Как с этим делом у Grid-ов из поставки VB6 - не знаю ибо не использую их напрочь. Но тоже, видимо должно как-то...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList