Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Informationen aus einem ClientDataSet auslesen (https://www.delphipraxis.net/181047-informationen-aus-einem-clientdataset-auslesen.html)

mkinzler 11. Jul 2014 14:01

AW: Informationen aus einem ClientDataSet auslesen
 
Warum sollte man das nicht können?

Sir Rufo 11. Jul 2014 14:02

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:
ViewModel
liegen. Dort befindet sich eine Liste
Delphi-Quellcode:
ViewModel.Items
mit dem Kontext für jeden Frame.

Die Frames werden in einer Liste
Delphi-Quellcode:
FItems : TObjectList<TWarenkorbEintragFrame>;
verwaltet.

Jeder Frame bekommt nun diesen Kontext zugewiesen:
Delphi-Quellcode:
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;
Damit die Anzahl der Frames zur Anzahl der Items passt, hier die Methode um die Frames zu entfernen oder zu erzeugen:
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;

ChristianG 11. Jul 2014 15:01

AW: Informationen aus einem ClientDataSet auslesen
 
Ich bin dabei es so zu lösen:
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.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;
Jetzt steht die Medung, dass es eine Bezeichnung mit dem Namen FrameTickets schon gibt...

mkinzler 11. Jul 2014 15:05

AW: Informationen aus einem ClientDataSet auslesen
 
Gib den Frames einfach verschiedene Namen
Delphi-Quellcode:
myFrame := TFrameTicket.Create(self);
myFrame.Name := Format( 'fr%s', u);

DeddyH 11. Jul 2014 15:14

AW: Informationen aus einem ClientDataSet auslesen
 
Oder man lässt die Namen ganz weg, wenn man die Frames nicht darüber ansprechen will/muss.

ChristianG 11. Jul 2014 15:20

AW: Informationen aus einem ClientDataSet auslesen
 
Zitat:

Zitat von DeddyH (Beitrag 1265240)
Oder man lässt die Namen ganz weg, wenn man die Frames nicht darüber ansprechen will/muss.

Genau dann kommt die Fehlermeldung. Dies bedeutet, dass ich den Namen brauche und den auch immer verändern muss.
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.

mkinzler 11. Jul 2014 15:31

AW: Informationen aus einem ClientDataSet auslesen
 
Das Format ist falsch, ist ja ein Integer und kein String. :oops:

ChristianG 11. Jul 2014 15:37

AW: Informationen aus einem ClientDataSet auslesen
 
Zitat:

Zitat von mkinzler (Beitrag 1265246)
Das Format ist falsch, ist ja ein Integer und kein String. :oops:

Delphi-Quellcode:
myFrame.Name :=Format( 'fr%s',[InttoStr(u)]);

Sir Rufo 11. Jul 2014 15:39

AW: Informationen aus einem ClientDataSet auslesen
 
Zitat:

Zitat von ChristianG (Beitrag 1265248)
Zitat:

Zitat von mkinzler (Beitrag 1265246)
Das Format ist falsch, ist ja ein Integer und kein String. :oops:

Delphi-Quellcode:
myFrame.Name :=Format( 'fr%s',[InttoStr(u)]);

Aua, my eyes are bleeding

Delphi-Quellcode:
Format( 'fr%d', [ u ] )

mkinzler 11. Jul 2014 15:40

AW: Informationen aus einem ClientDataSet auslesen
 
Besser

Delphi-Quellcode:
myFrame.Name :=Format( 'fr%d',[u]);


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:45 Uhr.
Seite 5 von 6   « Erste     345 6      

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