私の cxGrid には、日付ごとにグループ化されたレコードがあります。ただし、ユーザーがグループ化された日付を選択して [削除] をクリックすると、その日付でファイルされたすべてのレコードが削除されます。これを防ぐ方法はありますか?記録を個別に削除してほしい。
編集: 言及するのを忘れていました: グリッドの GroupByBox 関数を使用してグループ化しています。
私の cxGrid には、日付ごとにグループ化されたレコードがあります。ただし、ユーザーがグループ化された日付を選択して [削除] をクリックすると、その日付でファイルされたすべてのレコードが削除されます。これを防ぐ方法はありますか?記録を個別に削除してほしい。
編集: 言及するのを忘れていました: グリッドの GroupByBox 関数を使用してグループ化しています。
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;
データセット イベントに「中止」コードを追加します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;