AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Informationen aus einem ClientDataSet auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Informationen aus einem ClientDataSet auslesen

Ein Thema von ChristianG · begonnen am 10. Jul 2014 · letzter Beitrag vom 11. Jul 2014
Antwort Antwort
Seite 5 von 6   « Erste     345 6      
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#41

AW: Informationen aus einem ClientDataSet auslesen

  Alt 11. Jul 2014, 15:01
Warum sollte man das nicht können?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#42

AW: Informationen aus einem ClientDataSet auslesen

  Alt 11. Jul 2014, 15:02
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 ViewModel liegen. Dort befindet sich eine Liste ViewModel.Items mit dem Kontext für jeden Frame.

Die Frames werden in einer Liste 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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
ChristianG

Registriert seit: 8. Jul 2014
97 Beiträge
 
Delphi XE6 Starter
 
#43

AW: Informationen aus einem ClientDataSet auslesen

  Alt 11. Jul 2014, 16:01
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...
Christian
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#44

AW: Informationen aus einem ClientDataSet auslesen

  Alt 11. Jul 2014, 16:05
Gib den Frames einfach verschiedene Namen
Delphi-Quellcode:
myFrame := TFrameTicket.Create(self);
myFrame.Name := Format( 'fr%s', u);
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#45

AW: Informationen aus einem ClientDataSet auslesen

  Alt 11. Jul 2014, 16:14
Oder man lässt die Namen ganz weg, wenn man die Frames nicht darüber ansprechen will/muss.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
ChristianG

Registriert seit: 8. Jul 2014
97 Beiträge
 
Delphi XE6 Starter
 
#46

AW: Informationen aus einem ClientDataSet auslesen

  Alt 11. Jul 2014, 16:20
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 .
Christian

Geändert von ChristianG (11. Jul 2014 um 16:32 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#47

AW: Informationen aus einem ClientDataSet auslesen

  Alt 11. Jul 2014, 16:31
Das Format ist falsch, ist ja ein Integer und kein String.
Markus Kinzler
  Mit Zitat antworten Zitat
ChristianG

Registriert seit: 8. Jul 2014
97 Beiträge
 
Delphi XE6 Starter
 
#48

AW: Informationen aus einem ClientDataSet auslesen

  Alt 11. Jul 2014, 16:37
Das Format ist falsch, ist ja ein Integer und kein String.
myFrame.Name :=Format( 'fr%s',[InttoStr(u)]);
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#49

AW: Informationen aus einem ClientDataSet auslesen

  Alt 11. Jul 2014, 16:39
Das Format ist falsch, ist ja ein Integer und kein String.
myFrame.Name :=Format( 'fr%s',[InttoStr(u)]);
Aua, my eyes are bleeding

Format( 'fr%d', [ u ] )
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#50

AW: Informationen aus einem ClientDataSet auslesen

  Alt 11. Jul 2014, 16:40
Besser

myFrame.Name :=Format( 'fr%d',[u]);
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      

 

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 17:07 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