Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TcxGrid - Selektierte Records ändern (https://www.delphipraxis.net/62372-tcxgrid-selektierte-records-aendern.html)

ken_jones 3. Feb 2006 14:51

Datenbank: Firebird • Version: 1.5 • Zugriff über: IBO

TcxGrid - Selektierte Records ändern
 
Manchmal stolpert man über das einfachste...
Ich möchte lediglich diejenigen Records in der Datenbank ändern (ein SmallInt auf 1 setzen), welche im Developer Express TcxGrid selektiert sind.

Folgender Code funktioniert super, aber er ist nur für ungebundene Felder, soll heissen, im Grid wird dann zwar der neue Wert angezeigt, in der DB jedoch nicht gespeichert. So werden diese Werte dann auch wieder gelöscht, wenn man ein Update (Refresh) macht.

Delphi-Quellcode:
    cxGrid1DBTableView1.BeginUpdate;
    try
      For ii := 0 to cxGrid1DBTableView1.Controller.SelectedRowCount-1 do begin
        cxGrid1DBTableView1.DataController.SetValue(
          cxGrid1DBTableView1.Controller.SelectedRecords[ii].RecordIndex,
          cxGrid1DBTableView1.GetColumnByFieldName('UPPED').Index],
          1);
      end;
    finally
      cxGrid1DBTableView1.EndUpdate;
    end;
Es gibt auch noch die Möglichkeit über z.B. cxGrid1DBTableView1.DataController.GetSelectedBook mark eine Bookmark zu bekommen, damit wäre auch gedient, jedoch funktioniert dies nur, wenn das Grid im GridMode ist. Leider funktioniert dann die automatische Sortierung, Filterung und Gruppierung nicht mehr.

Es muss doch eine simple Lösung geben, wie man anhand der selektierten Records im Grid auf den Datensatz kommt um diesen Ändern zu können. Oder vielleicht gibts auch ne Variante über das Grid selbst den Datensatz zu ändern. Das Handbuch schweigt sich leider darüber aus...

ken_jones 3. Feb 2006 15:54

Re: TcxGrid - Selektierte Records ändern
 
Da leider Zeitdruck herrscht... hab ich erstmal nen Workaround gefunden.
Über das Grid die RowID auslesen (LINKSTORE_ID) und über diese dann den Datensatz finden und ändern.
Gefällt mir nicht, aber funktioniert.

Delphi-Quellcode:
    cxGrid1DBTableView1.BeginUpdate;
    try
      For ii := 0 to cxGrid1DBTableView1.Controller.SelectedRowCount-1 do begin
        id := Integer(cxGrid1DBTableView1.DataController.GetValue(
              cxGrid1DBTableView1.Controller.SelectedRecords[ii].RecordIndex,
              cxGrid1DBTableView1.GetColumnByFieldName('LINKSTORE_ID').Index));
        With cxGrid1DBTableView1.DataController.DataSet do
          if Locate('LINKSTORE_ID', id, []) then begin
            Edit;
            FieldByName('UPPED').AsInteger := 1;
            Post;
          end;
      end;
    finally
      cxGrid1DBTableView1.EndUpdate;
    end;
Bin also immernoch offen für bessere Vorschläge :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 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-2025 by Thomas Breitkreuz