AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

DevExpress Grid: Record Daten

Ein Thema von haentschman · begonnen am 26. Feb 2018 · letzter Beitrag vom 26. Feb 2018
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.288 Beiträge
 
Delphi 12 Athens
 
#1

DevExpress Grid: Record Daten

  Alt 26. Feb 2018, 13:40
Hallöle...

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...
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: DevExpress Grid: Record Daten

  Alt 26. Feb 2018, 14:32
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
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.288 Beiträge
 
Delphi 12 Athens
 
#3

AW: DevExpress Grid: Record Daten

  Alt 26. Feb 2018, 14:41
Danke erst Mal...

Dein Beispiel hilft mir schon weiter. Ich habe noch Probleme mit den Begriffsdefinitionen und das passende Event auszusuchen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#4

AW: DevExpress Grid: Record Daten

  Alt 26. Feb 2018, 15:33
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).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 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