cxGrid предотвращает групповое удаление
В моем cxGrid у меня есть записи, сгруппированные по дате. Однако когда пользователь выбирает сгруппированную дату и нажимает кнопку "Удалить", удаляются все записи, которые были поданы за эту дату. Есть ли способ предотвратить это? Я хотел бы, чтобы записи были удалены по отдельности.
РЕДАКТИРОВАТЬ: я забыл упомянуть: я группирую с помощью функции сетки GroupByBox.
1 ответ
Ты можешь проверить gridView.Controller.FocusedRow.IsData
свойство до удаления действия. Вот пример:
- Отключить функцию "автоматического удаления" с помощью набора
gridView.OptionsData.Deleting = False;
Добавить код в событие gridView
OnKeyUp
:procedure TmyForm.gridViewKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_DELETE) and (gridView.Controller.FocusedRow <> nil) then begin if gridView.Controller.FocusedRow.IsData then begin gridView.DataController.DeleteFocused; end else begin ShowMessage('You can''t delete group records.'); end; end; end;
Если вы используете действия набора данных по умолчанию или cxDBNavigator
попробуй это:
- Отключить функцию подтверждения удаления
gridView.OptionsData.DeleteConfirmation = False;
Добавить код "abort" в событие набора данных
BeforeDelete
:procedure TmyForm.DataSetBeforeDelete(DataSet: TDataSet); begin if (gridView.Controller.FocusedRow <> nil) and not gridView.Controller.FocusedRow.IsData then begin ShowMessage('You can''t delete group records.'); Abort; end; end;
Добавить код "прервать" в событие навигатора кода
OnButtonClick
(если вы не хотите показывать подтверждение удаления):procedure TmyForm.DBNavigatorButtonsButtonClick(Sender: TObject; AButtonIndex: Integer; var ADone: Boolean); begin if (AButtonIndex = NBDI_DELETE) and (gridView.Controller.FocusedRow <> nil) and not gridView.Controller.FocusedRow.IsData then begin ShowMessage('You can''t delete group records.'); Abort; end; end;