Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DevExpress Grid: Record Daten (https://www.delphipraxis.net/195408-devexpress-grid-record-daten.html)

haentschman 26. Feb 2018 13:40

DevExpress Grid: Record Daten
 
Hallöle...:P

Es ist heute nicht mein Tag... :?

Gegeben:
Ein Grid mit MultiSelect und z.B. 3 selected Rows mit einer Spalte im Dataset "IdType (Integer)". IdType z.B. = (0, 1, 2)

Soll:
Ich muß im OnFocusedRecordChanged (oder ähnliches (SelectionChanged)) ermitteln ob ALLE SELECTED ROWS den gleichen IdType haben. Wenn es so ist, dann ist das Funktionsresult der IdType, ansonsten -1.
Hintergrund:
Ist der IdType identisch, wird ein Button enabled.

Frage:
Wie komme ich an den IdType der Spalte auch bei ungleichen Positionen der Spalte im Dataset.

Danke...

dataspider 26. Feb 2018 14:32

AW: DevExpress Grid: Record Daten
 
Ich hoffe, ich habe dein Problem richtig verstanden.

Ich habe mir dafür mal einen Helper (für den DataController) gebastelt.

Delphi-Quellcode:
procedure TcxGridDBDataControllerHelper.GetFieldStringValues(AValues:
    TGenericStringList; const AFieldName: string; const AAllRecords: Boolean =
    True);
Var
  I: Integer;
  AItem: TcxCustomGridTableItem;
  AItemIndex: Integer;

  procedure AddValue(const AValue: Variant);
  Var
    AStringValue: string;
  begin
    AStringValue := VarToStr(AValue);
    if (AStringValue <> '') then
      AValues.Add(AStringValue);
  end;

begin
  if (Controller.SelectedRecordCount = 0) and not AAllRecords then
    Exit;
  if DataModeController.GridMode then
    raise Exception.Create('Methode in GridMode nicht möglich');
  AItem := GetItemByFieldName(AFieldName);

  if AItem = nil then
    Exit;

  AItemIndex := AItem.Index;
  if (Controller.SelectedRecordCount > 1) then
  begin
    for i := 0 to Controller.SelectedRecordCount - 1 do
      AddValue(Controller.SelectedRecords[i].Values[AItemIndex]);
  end
  else
    if AAllRecords then
    begin
      for i := 0 to FilteredRecordCount - 1 do
        AddValue(Values[FilteredRecordIndex[i], AItemIndex]);
    end
    else
      AddValue(Controller.FocusedRecord.Values[AItemIndex]);
end;
Hier werden die Werte eines beliebigen Feldes in eine Liste geschrieben.
Ich brauchte die Werte zur Weiterverwendung im SQL für ein IN Statement.

Ist es das was du suchst?

Frank

haentschman 26. Feb 2018 14:41

AW: DevExpress Grid: Record Daten
 
Danke erst Mal...:P

Dein Beispiel hilft mir schon weiter. Ich habe noch Probleme mit den Begriffsdefinitionen und das passende Event auszusuchen...:?

himitsu 26. Feb 2018 15:33

AW: DevExpress Grid: Record Daten
 
Im GridView.DataController findest du alle Records,
im GridView.Controller die gefilterten und selektierten Records Rows und den Fokusierten.

Die Selektion versteckt sich aber teilweise auch im DataController (hat sich bissl verlaufen)


Auf das DataSet solltest du bei sowas niemals zugreifen, denn da steht standardmäßig der fokusierte Datensatz drin (Grid und DataSet werden synchronisiert)
Im DataController müssen aber nicht unbedingt alle Daten drin sein (wenn der GridMode besagt, dass nicht alles geladen werden soll, was grade eh nicht sichtbar ist)
Willst/musst du dennoch auf das DataSet zugreifen, also auf andere Records, dann aufpassen dass nichts mit deiner Fokusierung/Selektierung passiert, wenn "kurzzeitig" der Record gewechselt wird.

Ich hatte mir mal paar Hilffunktionen geschrieben, welche die Daten der Selektierten oder gefilterten Rows liefern.
Hier muß man bissl aufpassen, bezüglich Record und Row. Record die Quelldaten im DataSet und die Copy im DataController und Row die Zuordnung zur Zeile im Grid.
Vorallem welche Indize man wo verwendet (Rows/FilteredRow/SelectedRow und Records/FilteredRecord/SelectecRecord).


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.

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