Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Zeilen in verschiedenen Labels anzeigen (https://www.delphipraxis.net/20795-zeilen-verschiedenen-labels-anzeigen.html)

citybreaker 23. Apr 2004 10:49


Zeilen in verschiedenen Labels anzeigen
 
Hallo,

ich habe eine Xml Datei und lasse einträge in eine ListBox anzeigen.

Delphi-Quellcode:
procedure UpdateList;
const
  Liste: Array[0..7] Of String = ('id', 'main', 'name', 'vorname', 'straße', 'hausnummer', 'postleitzahl', 'ort');
var
  rdfs: IXmlDomNodeList;
  id1: IXMLDomNode;
  main1: IXmlDomNode;
  I: integer;
begin
  MainFrm.ListBox1.Items.Clear;
  MainFrm.ListBox1.Items.BeginUpdate;

  rdfs := XmlDoc.documentelement.selectNodes('adblock');
  for i := 0 to rdfs.length -1 do begin
    id1 := rdfs.item[i].selectsingleNode(liste[0]);
    main1 := rdfs.item[i].selectsingleNode(liste[1]);
    MainFrm.ListBox1.Items.Add(id1.text + ' ' + main1.text);
  end;

  MainFrm.ListBox1.Items.EndUpdate;
end;
Jetzt steht in der ListBox

Name Vorname

Wenn dort draufgeklickt wird soll in Label1 der Name in Label2 der Vorname im nächsten
die Straße u.s.w stehen. Alerdings hab ich nicht so wirklick ahnung wie ich das umsetzten
soll. Und ist eine Xml Datei überhaupt für ein Adressbuch geeignet?

Die Xmldatei
Zitat:

<?xml version="1.0" encoding="ISO-8859-1"?>
<rdf>
<adblock>
<id>1</id>
<main></main>
<name></name>
<vorname></vorname>
<straße><straße>
<hausnummer></hausnummer>
<postleitzahl></postleitzahl>
<ort></ort>
</adblock>
</rdf>

Sharky 23. Apr 2004 10:52

Re: Zeilen in verschiedenen Labels anzeigen
 
Zitat:

Zitat von citybreaker
...Jetzt steht in der ListBox ...

Hai citybreaker,

Warum eine ListBox? Ich würde dafür eine ListView nehmen.

MathiasSimmack 23. Apr 2004 11:32

Re: Zeilen in verschiedenen Labels anzeigen
 
@Sharky: Ich auch. ;)

Zitat:

Zitat von citybreaker
Und ist eine Xml Datei überhaupt für ein Adressbuch geeignet?

Klar, stellt doch Luckie gerade unter Beweis. Und speziell bei Adressen, die ja keine allzu tief verschachtelten Strukturen aufweisen (eigentlich, IMHO), ist XML durchaus geeignet.

Problematisch wird´s allerdings in deinem Fall bei der Auswertung ein bisschen. Weil sich in der Listbox Name und Vorname befinden müsstest du das erst wieder auftrennen, bevor du in der XML-Datei nach dem passenden Knoten (selectSingleNode) suchen kannst.
Darum wäre, wie Sharky auch schrieb, eine List-View evtl. besser geeignet, weil du dort die einzelnen Informationen (Name, Vorname, usw.) in einzelne Spalten eintragen lassen kannst.

Die Umsetzung, an der du im Augenblick wohl "hängst", ist auch kein Problem. Wenn Name und Vorname getrennt vorliegen, dann klick mal hier. Willst du ganz auf Nummer sicher gehen (für den Fall, dass evtl. doch zwei identische Namen und Vornamen in der XML-Datei stehen), dann nimm für die Suche nicht "selectSingleNode" sondern auch "selectNodes" und lass alle Fundstücke in einem separaten Fenster anzeigen.

citybreaker 23. Apr 2004 12:15

Re: Zeilen in verschiedenen Labels anzeigen
 
Wenn ich wieder TListView nehme, bin ich wieder bei meinem alten problem. (Thread unter diesem S. 2)

Sharky 23. Apr 2004 12:25

Re: Zeilen in verschiedenen Labels anzeigen
 
Zitat:

Zitat von citybreaker
Wenn ich wieder TListView nehme...

Wo ist der Unterschied ob Du die Daten in eine TListBox schreibst oder in ein TListView?

Delphi-Quellcode:
procedure UpdateList;
const
  Liste: Array[0..7] Of String = ('id', 'main', 'name', 'vorname', 'straße', 'hausnummer', 'postleitzahl', 'ort');
var
  rdfs: IXmlDomNodeList;
  id1: IXMLDomNode;
  main1: IXmlDomNode;
  I: integer;
  LI: TListItem;
begin
  MainFrm.ListView1.Items.BeginUpdate;
  MainFrm.Listview1.Items.Clear;
  rdfs := XmlDoc.documentelement.selectNodes('adblock');
  for i := 0 to rdfs.length -1 do begin
    id1 := rdfs.item[i].selectsingleNode(liste[0]);
    main1 := rdfs.item[i].selectsingleNode(liste[1]);
    LI := Listview1.Items.Add;
    LI.ImageIndex := 0;
    LI.Caption := id1.Text;
    LI.SubItems.Add(main1.text);
  end;
  MainFrm.ListView1.Items.EndUpdate;
end;
Und die ID könntest Du sehr schön der Eigenschaft .Data des ListItems zuweisen.

MathiasSimmack 23. Apr 2004 13:34

Re: Zeilen in verschiedenen Labels anzeigen
 
Zitat:

Zitat von citybreaker
Wenn ich wieder TListView nehme, bin ich wieder bei meinem alten problem. (Thread unter diesem S. 2)

Wie gesagt: Ich glaube, bei dir kommen sich nach wie vor zwei Controls/Komponenten/was auch immer in die Quere, die die Eigenschaft "NAMES" benutzen. Und irgendwo hast du evtl. noch ein
Delphi-Quellcode:
with XXXX do
stehen, so dass die Eigenschaft "Names" fälschlich anstelle des eigentlichen Arrays "NAMES" (s. deine Probleme) benutzt wird. Anders kann ich es mir nicht erklären, denn so sehr haben sich die Komponenten auch unter Delphi 7 nicht geändert. Und ich habe keinerlei Probleme, bspw. den Movie Organizer von Chakotay, auf dem das Tutorial ja grob basiert, mit D7 zu kompilieren und zu starten.

Der einzige Fehler, der aber IMHO mittlerweile behoben ist, war eben damals der Abdruck in Chakotays Tutorial, wo auch das
Delphi-Quellcode:
with XXXX do
drin stand, wodurch es zu dem o.g. Problem kam. Nachdem das behoben war, gab es keine Probleme mehr. Nicht bei mir, soll das heißen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 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