powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Grid тянет текущую область данных на себя. Как пресечь?
6 сообщений из 6, страница 1 из 1
Grid тянет текущую область данных на себя. Как пресечь?
    #38759627
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При запуске обновления неких таблиц, выбираемых по текущей позиции ActiveCell в Grid, процедуры обновления ставят эти таблицы в текущую область данных. Процедуры обновления поверх формы с Grid'ом выставляют свои модальные окна диалога для запроса дополнительных данных.
Иногда это проходит без осложнений, иногда Grid подставляет в текущую область свой RecordSource и обновление выбранной таблицы сбивается. Вот это "иногда" сильно заинтриговывает. Почему такая нерегулярность?
Чтобы объехать эти "иногда" знаю только три приёма.
1) Переписать процедуры обновления, чтобы они обходились без текущей области данных. Слишком хлопотно.
2) Перед запуском процедуры обновления выбранной таблицы отключить источник: Grid.RecordSource = '' и дать GridForm.LockScreen = .T., а по завершении процедуры обновления восстанавить как было. Тогда придётся в окнах диалога Movable = .F., чтобы их перемещение не мазало замороженную форму.
3) Можно ещё объявить GridForm.DataSession = 2. Но тогда придётся открывать одни и те же таблицы в двух Session для этой формы и для процедур обновления. Да ещё и на беду процедуры обновления запускаются из объекта, встроенного в форму. Переделывать уже не с руки.
Все варианты неудобны. Как же всё-таки добиться, чтобы Grid работала всегда одинаково и не тянула текущую область данных на себя?
...
Рейтинг: 0 / 0
Grid тянет текущую область данных на себя. Как пресечь?
    #38759650
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эврика! А что если использовать Grid.Enabled = .F.. Надо будет попробовать.
Только как проверить устойчивость поведения, если будут наблюдаться благоприятные результаты?
...
Рейтинг: 0 / 0
Grid тянет текущую область данных на себя. Как пресечь?
    #38759659
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rostislav D. Kudryashov, ещё одна Эврика. Похоже, Grid.Enabled = .F. не срабатывает, т.к. вставив в процедуру обновления код
...
Рейтинг: 0 / 0
Grid тянет текущую область данных на себя. Как пресечь?
    #38759660
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Grid тянет текущую область данных на себя. Как пресечь?
    #38759673
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rostislav D. Kudryashov, конечно, обработчик Grid.When должен RETURN THIS.Enabled
Но всё равно непонятно, когда на самом деле, без SET STEP ON случается, что Grid забирает себе текущую область данных.
Не будет ли необходимой страховкой на ВСЕ случаи после Grid.Enabled = .F. давать ещё RAISEEVENT (Grid, 'Valid') ???
...
Рейтинг: 0 / 0
Grid тянет текущую область данных на себя. Как пресечь?
    #38759880
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы такие вопросы не возникали:
1. Всегда указывай таблицу, поле которой используешь
Код: sql
1.
x = MyTable.MyField


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


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


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