AW: Informationen aus einem ClientDataSet auslesen
Warum sollte man das nicht können?
|
AW: Informationen aus einem ClientDataSet auslesen
Der Plan hört sich schon mal gut an.
Wenn du jetzt jedem Frame auch noch einen Kontext zuweist aus dem er sich bedienen kann, dann hast du quasi fast alles geschafft. Die Form selber hat einen Kontext in
Delphi-Quellcode:
liegen. Dort befindet sich eine Liste
ViewModel
Delphi-Quellcode:
mit dem Kontext für jeden Frame.
ViewModel.Items
Die Frames werden in einer Liste
Delphi-Quellcode:
verwaltet.
FItems : TObjectList<TWarenkorbEintragFrame>;
Jeder Frame bekommt nun diesen Kontext zugewiesen:
Delphi-Quellcode:
Damit die Anzahl der Frames zur Anzahl der Items passt, hier die Methode um die Frames zu entfernen oder zu erzeugen:
procedure TForm1.LoadFromModel;
var LIdx : Integer; begin // Kein ViewModel, dann alles weg if not Assigned( ViewModel ) then begin FItems.Clear; Summe_Label.Caption := ''; Exit; end; // Anzahl der Frames anpassen AdjustItems; // Zuweisen des Kontexts an die Frames for LIdx := 0 to ViewModel.Items.Count - 1 do FItems[LIdx].ViewModel := ViewModel.Items[LIdx]; Summe_Label.Caption := CurrToStrF( ViewModel.Summe, ffCurrency, 2 ); end;
Delphi-Quellcode:
procedure TForm1.AdjustItems;
var LFrameItem : TWarenkorbEintragFrame; LIdx : Integer; LTop : Integer; LDiff : Integer; begin // Wenn die Anzahl der Frames nicht mit der Anzahl der Einträge übereinstimmt, // dann müssen wir hier tätig werden if FItems.Count <> ViewModel.Items.Count then begin // Überflüssige Frames entsorgen if FItems.Count > ViewModel.Items.Count then begin LDiff := FItems.Count - ViewModel.Items.Count; FItems.DeleteRange( FItems.Count - LDiff, LDiff ); end; // Fehlende Frames hinzufügen while FItems.Count < ViewModel.Items.Count do begin LFrameItem := TWarenkorbEintragFrame.Create( nil ); LFrameItem.Parent := ScrollBox1; FItems.Add( LFrameItem ); end; // Frames positionieren LTop := -ScrollBox1.VertScrollBar.Position; for LIdx := 0 to ViewModel.Items.Count - 1 do begin LFrameItem := FItems[LIdx]; LFrameItem.ViewModel := ViewModel.Items[LIdx]; LFrameItem.Top := LTop; LFrameItem.Left := 0; LFrameItem.Width := ScrollBox1.ClientWidth; LFrameItem.Anchors := [akLeft, akTop, akRight]; LTop := LTop + LFrameItem.Height; end; end; end; |
AW: Informationen aus einem ClientDataSet auslesen
Ich bin dabei es so zu lösen:
Delphi-Quellcode:
Jetzt steht die Medung, dass es eine Bezeichnung mit dem Namen FrameTickets schon gibt...
for u := 0 to XMLbezahlen.DocumentElement.ChildNodes.Count - 1 do begin
bnode := XMLbezahlen.DocumentElement.ChildNodes.Get(u); cdsBezahlen.Append; cdsBezahlen.FieldByName('Position').asInteger := u; cdsBezahlen.FieldByName('ID').AsString := bnode.ChildNodes.FindNode('ID').Text; cdsBezahlen.FieldByName('Name').AsString := bnode.ChildNodes.FindNode('Name').Text; cdsBezahlen.FieldByName('Kosten').AsString := bnode.ChildNodes.FindNode('Price').Text; cdsBezahlen.FieldByName('Sitzrheie').AsString := bnode.ChildNodes.FindNode('SeatingCategory').Text; cdsBezahlen.Post; myFrame := TFrameTicket.Create(self); myFrame.Parent := TabItem5; myFrame.SetBounds(10, y, 237, 40); myFrame.Visible := true; y := y + 100; myFrame.TicketName := cdsBezahlen.FieldByName('Name').AsString ; myFrame.Category := cdsBezahlen.FieldByName('Sitzrheie').AsString ; myFrame.Preis := cdsBezahlen.FieldByName('Kosten').AsCurrency; end; |
AW: Informationen aus einem ClientDataSet auslesen
Gib den Frames einfach verschiedene Namen
Delphi-Quellcode:
myFrame := TFrameTicket.Create(self);
myFrame.Name := Format( 'fr%s', u); |
AW: Informationen aus einem ClientDataSet auslesen
Oder man lässt die Namen ganz weg, wenn man die Frames nicht darüber ansprechen will/muss.
|
AW: Informationen aus einem ClientDataSet auslesen
Zitat:
mkinzer: Dein Vorschlag ist gut, dennoch funktioniert er nicht, weil man Format nicht unter diesen umständen nicht aufrufen kann Die [] zwischen dem u fehlen :D. |
AW: Informationen aus einem ClientDataSet auslesen
Das Format ist falsch, ist ja ein Integer und kein String. :oops:
|
AW: Informationen aus einem ClientDataSet auslesen
Zitat:
Delphi-Quellcode:
myFrame.Name :=Format( 'fr%s',[InttoStr(u)]);
|
AW: Informationen aus einem ClientDataSet auslesen
Zitat:
Delphi-Quellcode:
Format( 'fr%d', [ u ] )
|
AW: Informationen aus einem ClientDataSet auslesen
Besser
Delphi-Quellcode:
myFrame.Name :=Format( 'fr%d',[u]);
|
AW: Informationen aus einem ClientDataSet auslesen
Zitat:
Delphi-Quellcode:
Jetzt kümmert sich der Parent um das Aufräumen
myFrame := TMyFrame.Create( nil );
myFrame.Parent := TabItem5; |
AW: Informationen aus einem ClientDataSet auslesen
Zitat:
Gleich nur das suchen, was man haben will. |
AW: Informationen aus einem ClientDataSet auslesen
jetzt habe ich die ganzen Frames geladen. Nur die Frames gehen unter das Formular. Hier kann ich das Formular vergrößern, aber bei einer App geht dies ja nicht. Deshalb brauche ich irgendetwas zum scrollen. Geht ein Panel?
ps: Danke für eure Hilfe. Ich hatte nur 1 Jahr Schuldelphi und muss noch einiges lernen. |
AW: Informationen aus einem ClientDataSet auslesen
Zitat:
Delphi-Quellcode:
for u := 0 to XMLbezahlen.DocumentElement.ChildNodes.Count - 1 do begin
bnode := XMLbezahlen.DocumentElement.ChildNodes.Get(u); cdsBezahlen.Append; cdsBezahlen.FieldByName('Position').asInteger := u; cdsBezahlen.FieldByName('ID').AsString := bnode.ChildNodes.FindNode('ID').Text; cdsBezahlen.FieldByName('Name').AsString := bnode.ChildNodes.FindNode('Name').Text; cdsBezahlen.FieldByName('Kosten').AsString := bnode.ChildNodes.FindNode('Price').Text; cdsBezahlen.FieldByName('Sitzrheie').AsString := bnode.ChildNodes.FindNode('SeatingCategory').Text; cdsBezahlen.Post; myFrame := TFrameTicket.Create(self); myFrame.Name :=Format( 'fr%s',[InttoStr(u)]); myFrame.Parent := TabItem5; myFrame.SetBounds(10, y, 237, 40); myFrame.Visible := true; y := y + 100; myFrame.TicketName := cdsBezahlen.FieldByName('Name').AsString ; myFrame.Category := cdsBezahlen.FieldByName('Sitzrheie').AsString ; myFrame.Preis := cdsBezahlen.FieldByName('Kosten').AsCurrency; end; |
AW: Informationen aus einem ClientDataSet auslesen
Geht auch eine FMX.Layouts.TScrollBox?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:34 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