Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Grid тянет текущую область данных на себя. Как пресечь? / 6 сообщений из 6, страница 1 из 1
27.09.2014, 21:48
    #38759627
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid тянет текущую область данных на себя. Как пресечь?
При запуске обновления неких таблиц, выбираемых по текущей позиции ActiveCell в Grid, процедуры обновления ставят эти таблицы в текущую область данных. Процедуры обновления поверх формы с Grid'ом выставляют свои модальные окна диалога для запроса дополнительных данных.
Иногда это проходит без осложнений, иногда Grid подставляет в текущую область свой RecordSource и обновление выбранной таблицы сбивается. Вот это "иногда" сильно заинтриговывает. Почему такая нерегулярность?
Чтобы объехать эти "иногда" знаю только три приёма.
1) Переписать процедуры обновления, чтобы они обходились без текущей области данных. Слишком хлопотно.
2) Перед запуском процедуры обновления выбранной таблицы отключить источник: Grid.RecordSource = '' и дать GridForm.LockScreen = .T., а по завершении процедуры обновления восстанавить как было. Тогда придётся в окнах диалога Movable = .F., чтобы их перемещение не мазало замороженную форму.
3) Можно ещё объявить GridForm.DataSession = 2. Но тогда придётся открывать одни и те же таблицы в двух Session для этой формы и для процедур обновления. Да ещё и на беду процедуры обновления запускаются из объекта, встроенного в форму. Переделывать уже не с руки.
Все варианты неудобны. Как же всё-таки добиться, чтобы Grid работала всегда одинаково и не тянула текущую область данных на себя?
...
Рейтинг: 0 / 0
27.09.2014, 23:30
    #38759650
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid тянет текущую область данных на себя. Как пресечь?
Эврика! А что если использовать Grid.Enabled = .F.. Надо будет попробовать.
Только как проверить устойчивость поведения, если будут наблюдаться благоприятные результаты?
...
Рейтинг: 0 / 0
27.09.2014, 23:57
    #38759659
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid тянет текущую область данных на себя. Как пресечь?
Rostislav D. Kudryashov, ещё одна Эврика. Похоже, Grid.Enabled = .F. не срабатывает, т.к. вставив в процедуру обновления код
...
Рейтинг: 0 / 0
28.09.2014, 00:02
    #38759660
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid тянет текущую область данных на себя. Как пресечь?
Rostislav D. Kudryashov, ещё одна Эврика. Похоже, Grid.Enabled = .F. не срабатывает, т.к. вставив в процедуру обновления код
SELECT OtherTable
SET STEP ON
видим, что в активной области ALIAS() == Grid.RecordSource.
Но если переопределить обработчик события
PROCEDURE Grid.When
RETURN NOT THIS.Enabled
то после STEP ON оказывается, что ALIAS() == OtherTable.
...
Рейтинг: 0 / 0
28.09.2014, 00:40
    #38759673
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid тянет текущую область данных на себя. Как пресечь?
Rostislav D. Kudryashov, конечно, обработчик Grid.When должен RETURN THIS.Enabled
Но всё равно непонятно, когда на самом деле, без SET STEP ON случается, что Grid забирает себе текущую область данных.
Не будет ли необходимой страховкой на ВСЕ случаи после Grid.Enabled = .F. давать ещё RAISEEVENT (Grid, 'Valid') ???
...
Рейтинг: 0 / 0
28.09.2014, 17:18
    #38759880
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid тянет текущую область данных на себя. Как пресечь?
Чтобы такие вопросы не возникали:
1. Всегда указывай таблицу, поле которой используешь
Код: sql
1.
x = MyTable.MyField


2. Явно указывай таблицу с которой собираешься работать (in ...) например
Код: sql
1.
repl in MyTable ...


3. Когда невозможно указать, переключайся в нужную рабочую область
Код: sql
1.
2.
3.
sele MyTable
scan 
...
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Grid тянет текущую область данных на себя. Как пресечь? / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]