cxGrid предотвращает групповое удаление

В моем cxGrid у меня есть записи, сгруппированные по дате. Однако когда пользователь выбирает сгруппированную дату и нажимает кнопку "Удалить", удаляются все записи, которые были поданы за эту дату. Есть ли способ предотвратить это? Я хотел бы, чтобы записи были удалены по отдельности.

РЕДАКТИРОВАТЬ: я забыл упомянуть: я группирую с помощью функции сетки GroupByBox.

1 ответ

Решение

Ты можешь проверить gridView.Controller.FocusedRow.IsData свойство до удаления действия. Вот пример:

  1. Отключить функцию "автоматического удаления" с помощью набора gridView.OptionsData.Deleting = False;
  2. Добавить код в событие 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 попробуй это:

  1. Отключить функцию подтверждения удаления gridView.OptionsData.DeleteConfirmation = False;
  2. Добавить код "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;
    
  3. Добавить код "прервать" в событие навигатора кода 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;
    
Другие вопросы по тегам