0

私の cxGrid には、日付ごとにグループ化されたレコードがあります。ただし、ユーザーがグループ化された日付を選択して [削除] をクリックすると、その日付でファイルされたすべてのレコードが削除されます。これを防ぐ方法はありますか?記録を個別に削除してほしい。

編集: 言及するのを忘れていました: グリッドの GroupByBox 関数を使用してグループ化しています。

4

1 に答える 1

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. データセット イベントに「中止」コードを追加します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;
    
于 2015-09-12T14:48:59.713 に答える