Распечатать страницу

Отображение пометки удаления в VFP

« Назад

Во всех формах, имеющих сетку, пометка удаления проставляется обработчиком события Click кнопки "Удалить / Возвратить". Названием кнопки (ее имя во всех формах – Command3) управляет следующий код обработчика события AfterRowColChange сетки формы:

&& Фрагмент обработчика события AfterRowColChange сетки

&&

lparameters nColIndex

with ThisForm

if Deleted( ) then

.Command3.Caption = "Возвратить"

else

Command3.Caption = "Удалить"

endif

endWith

Если при удалении отказывает триггер удаления, то обработчик события Error кнопки Command3, генерирует соответствующее сообщение.

Однако если сетка имеет столбец для пометки удаления, то в нем можно, например, мышью проставить или убрать пометку удаления записи. При этом, во первых, не изменится название кнопки и, во-вторых, сообщение об отказе триггера удаления (Trigger failed in Authors) появится только при смене строки.

Таким образом, имеются две проблемы, для устранения которых можно применить следующую схему:

1. Устранить из сетки столбец для пометки удаления.

2. Ввести в сетку столбец, повторяющий пометку удаления; расположение и размеры столбца те же, что и столбца для пометки удаления.

3. Сделать добавленный столбец доступным только для чтения.

4.  качестве источника данных столбца задать выражение IifDeleted, '*', ''), выводя в столбце звездочку, если запись имеет пометку удаления, или пустую строку – в противном случае.

Приведенная схема для примера реализована в форме "Виды произведений". Некоторые свойства добавленного столбца сетки (его имя Column2) устанавливаются в обработчике события Init формы:

with This

&&

&& Столбец для дублирования пометки удаления

.Grid1.Column2.ReadOnly = .T.

.Grid1.Column2.ControlSource = "Iif(Deleted( ), '*', '')"

.Grid1.Column2.Width = 10

endWith