Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Multidelete im cxGrid (https://www.delphipraxis.net/127690-multidelete-im-cxgrid.html)

Morphie 17. Jan 2009 10:24

Datenbank: Firebird • Version: 2 • Zugriff über: devart's IBDAC

Multidelete im cxGrid
 
Morgen liebe DPler! =)

Ich weiß nicht, ob ich hier richtig bin, hoffe aber mal schon ;-)

Zu meinem Problem:
Ich versuche mit dem cxGrid eine Art Multidelete durchzuführen. Also alle markierten Datensätze sollen gelöscht werden...

Mein code dazu sieht wie folgt aus:
Delphi-Quellcode:
procedure Tkunden.LoeschenExecute(Sender: TObject);
var
i: integer;
bm: TBookmarkStr;
begin
  for i := 0 to GridDBTableView1.Controller.SelectedRecordCount-1 do
  begin
    bm:=GridDBTableView1.DataController.GetSelectedBookmark(i);
    queryKundenliste.Bookmark:=bm;
    queryKundenliste.Delete;
  end;
end;
Jetzt bekomme ich aber immer folgende Fehlermeldung:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt test.exe ist eine Exception der Klasse EcxInvalidDataControllerOperation mit der Meldung 'DataController not in GridMode' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------


Der DataController soll aber auch nicht im GridMode arbeiten.
Gibt es dafür irgend eine Lösung?

mjustin 17. Jan 2009 10:53

Re: Multidelete im cxGrid
 
Zitat:

Zitat von Morphie
Ich versuche mit dem cxGrid eine Art Multidelete durchzuführen. Also alle markierten Datensätze sollen gelöscht werden...

Mein code dazu sieht wie folgt aus:
Delphi-Quellcode:
procedure Tkunden.LoeschenExecute(Sender: TObject);
var
i: integer;
bm: TBookmarkStr;
begin
  for i := 0 to GridDBTableView1.Controller.SelectedRecordCount-1 do
  begin
    bm:=GridDBTableView1.DataController.GetSelectedBookmark(i);
    queryKundenliste.Bookmark:=bm;
    queryKundenliste.Delete;
  end;
end;
Jetzt bekomme ich aber immer folgende Fehlermeldung:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt test.exe ist eine Exception der Klasse EcxInvalidDataControllerOperation mit der Meldung 'DataController not in GridMode' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------


Der DataController soll aber auch nicht im GridMode arbeiten.

In diesem Fall würde ich alle markierten Sätze durchlaufen, die Werte der Primary Keys auslesen und jeweils ein SQL Delete Statement an die Datenbank senden. Wenn Konsistenz wichtig ist, natürlich in einer Transaktion, für den Fall dass ein Satz sich nicht löschen lässt.

Im DevExpress Forum gibt es Beispielsource, wie man die markierten Sätze durchläuft ohne dabei auf die verbundene Query zuzugreifen (die Daten stehen ja schon im Grid).

Morphie 18. Jan 2009 19:13

Re: Multidelete im cxGrid
 
Für alle, die das gleiche Problem haben:

Delphi-Quellcode:
procedure Tkunden.LoeschenExecute(Sender: TObject);
begin
  GridDBTableView1.Controller.DeleteSelection;
end;
so einfach kanns sein ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz