Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как отследить изменения в Grid
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Подскажите уважаемые : Имеется форма с Gridом в котором интегрирован CheckBox, Grid построен на основе курсора созданного Selectом с опцией readwrite, используется табличная буферизация для курсора CURSORSETPROP("Buffering", 5, "имя курсора"), очень бы хотелось сделать доступной кнопку "Запись" на форме только в том случае, когда произошли изменения в Gridе Пробовал отловить в InterActiveChange CheckBoxа - не получается значения oldval() и curval() совпадают - может кто подскажет куда надоть плыть - чтобы получить искомый эффект? Заранее благодарен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2004, 13:12 |
|
||
|
Как отследить изменения в Grid
|
|||
|---|---|---|---|
|
#18+
ДОБРЫЙ ДЕНЬ! ПРИ ОПТИМИСТИЧЕСКОЙ БУФЕРИЗАЦИИ ОПРЕДЕЛИТЬ - ИЗМЕНИЛ ЛИ ДРУГОЙ ПОЛЬЗОВАТЕЛЬ ЗАПИСЬ МОЖНО ТОЛЬКО СДЕЛАВ ЭТУ ПОПЫТКУ САМОМУ. ТОГДА VVV=TABLEUPDATE() И ЕСЛИ VVV=.T. - НЕ БЫЛО ИЗМЕНЕНИЙ , ИНАЧЕ КТО-ТО ОБНОВИЛ ЗАПИСЬ РАНЬШЕ ВАС. В ЭТОМ СЛУЧАЕ ПОПЫТКА СИГНАЛИЗИРОВАТЬ ПОЛЬЗОВАТЕЛЮ ДОСТУПНОСТЬЮ КНОПКИ НЕ ПРОХОДИТ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2004, 14:06 |
|
||
|
Как отследить изменения в Grid
|
|||
|---|---|---|---|
|
#18+
ДОБРЫЙ ДЕНЬ! ПРИ ОПТИМИСТИЧЕСКОЙ БУФЕРИЗАЦИИ ОПРЕДЕЛИТЬ - ИЗМЕНИЛ ЛИ ДРУГОЙ ПОЛЬЗОВАТЕЛЬ ЗАПИСЬ МОЖНО ТОЛЬКО СДЕЛАВ ЭТУ ПОПЫТКУ САМОМУ. ТОГДА VVV=TABLEUPDATE() И ЕСЛИ VVV=.T. - НЕ БЫЛО ИЗМЕНЕНИЙ , ИНАЧЕ КТО-ТО ОБНОВИЛ ЗАПИСЬ РАНЬШЕ ВАС. В ЭТОМ СЛУЧАЕ ПОПЫТКА СИГНАЛИЗИРОВАТЬ ПОЛЬЗОВАТЕЛЮ ДОСТУПНОСТЬЮ КНОПКИ НЕ ПРОХОДИТ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2004, 14:08 |
|
||
|
Как отследить изменения в Grid
|
|||
|---|---|---|---|
|
#18+
Тебе надо сравнивать значение в таблице и значение в буфере: OldVal() - это значение, которое было до того, как ты начал вносить изменения в буфер первый раз CurVal() - это текущее значение в таблице. Имеет смысл использовать для проверки факта изменения той же записи другим пользователем. Но для курсора - это бессмысленно, поскольку курсор всегда создается на стороне клиента и другой пользователь его просто не видит Чтобы прочитать значение в буфере, надо просто считать значение поля. Это собственно и будет содержимое буфера. Т.е. надо сравнивать OldVal("MyTab.MyField")=MyTab.MyField Еще почитай описание функций GetFldState() GetNextModified() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2004, 14:23 |
|
||
|
Как отследить изменения в Grid
|
|||
|---|---|---|---|
|
#18+
Благодарю за опреративные ответы И опыт сын ошибок трудных ...... попытаюсь проанализировать и разобраться в предложенных решениях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2004, 16:40 |
|
||
|
Как отследить изменения в Grid
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Повесил код в InteractiveChange для CheckBoxa: FOR nFieldNum = 1 TO FCOUNT("limit_cur") IF GETFLDSTATE(nFieldNum,"limit_cur") =2 oform1.cmdCmndwr1.Enabled=.t. oform1.cmdCmndwr1.Refresh() EXIT ENDIF ENDFOR Срабатывает на второй раз - хотя в отладчике все нормально срабатывает, видимо проблема связана с передачей данных из интегрированного Checka в Grid, сделал сброс RecordSourse для Grid перед этой проверкой oform1.Grid3.RecordSource="" oform1.Grid3.RecordSource="limit_cur" стало нормально - но .... Grid сдвигается вверх до той строки в которой были изменения Может подскажет кто-нить - как это вылечить? Заранее благодарен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2004, 13:16 |
|
||
|
Как отследить изменения в Grid
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что InteractiveChange срабатывает при изменении содержимого объекта . Но в этот момент содержимое собственно полей таблицы-источника еще не изменилось! С другой стороны, я не совсем понимаю, зачем тебе проверять факт изменения содержимого? Ведь если сработало событие InteractiveChange, то это уже предполагает, что были внесены изменения. Ну и обновляй объекты сразу, без дополнительной проверки. При этом значение CheckBox.Value внутри InteractiveChange - это уже новое (измененное) значение PS: Если в качестве порядкового номера поля для функции GetFldState() поставить "-1", то будет возвращена символьная строка со статусами всех полей. Причем первым будет идти статус Deleted(). Как следствие, если необходимо проверить было ли хоть какое-то изменение в любом поле текущей записи это можно сделать так: IF LEN(CharTran(GetFldState(-1,"MyTab"),"1",""))>0 * была модификация ENDIF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2004, 15:35 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32675409&tid=1595885]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
53ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 353ms |

| 0 / 0 |
