AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Per Klick auf Listboxeintrag bestimmten Datensatz auslesen?
Thema durchsuchen
Ansicht
Themen-Optionen

Per Klick auf Listboxeintrag bestimmten Datensatz auslesen?

Ein Thema von Rayne · begonnen am 20. Dez 2005 · letzter Beitrag vom 20. Dez 2005
Antwort Antwort
Rayne

Registriert seit: 27. Nov 2005
7 Beiträge
 
#1

Per Klick auf Listboxeintrag bestimmten Datensatz auslesen?

  Alt 20. Dez 2005, 20:18
Hallo!

In meinem kleinen Programm kann man in verschiedene Edit-Felder Dinge eintragen, die dann in einer Datei gespeichert werden.

Jetzt habe ich eine Suche, die es mir ermöglicht, mit Suchbegriffen den jeweiligen passenden Datensatz aus der Datei rauszusuchen und alle dazugehörigen Werte wieder in die Edit-Felder einträgt.

Da es ja vorkommen kann, dass in bestimmten Datensätzen einzelne Bezeichnungen doppelt vorkommen (bspw. Vorname, Artikelname etc.), habe ich mir eine ListBox erstellt, wo alle Datensätze angezeigt werden, wenn es mal einen doppelten Eintrag geben sollte.
Ein Beispiel: Es gibt 2 Datensätze, wo die Person jeweils Klaus heißt. Jetzt suche ich nach Klaus und in meiner ListBox erscheint 2 mal der Eintrag Klaus.

Jetzt kommt mein Problem: Ich möchte, dass wenn ich nun auf solch einen Eintrag in der ListBox klicke, die dazugehörigen weiteren Eigenschaften dieses Datensatzes in den Edit-Feldern eingetragen werden.
Ein Beispiel: Klaus 1 wohnt in Berlin, ist 38 Jahre alt und verheiratet. Klaus 2 wohnt in München, ist 22 Jahre alt und Single.
In meiner ListBox stehen nun 2 Einträge „Klaus“ (das geht bis jetzt alles schon).
Klicke ich auf den ersten Eintrag, sollen in den Edit-Feldern alle Eigenschaften von Klaus 1 eingefügt werden. Klicke ich auf Klaus 2, sollen alle Eigenschaften von ihm dort eingetragen werden.

Der Quellcode für die Suche lautet:

Delphi-Quellcode:
procedure TForm1.Suchen1Click(Sender: TObject); //Suche
var q,index : integer; suchstring: string[30];
begin

 
index:=-1;
suchstring:=Edit15.Text;
Listbox1.Clear;

 
If Edit15.Text='Then
begin
ShowMessage('Bitte einen Suchbegriff eingeben!');
end

 
Else
begin

 
If RadioButton1.checked=True Then
begin

 
  for q:=0 to 100 do //sucht nach Gurtzeugen
    begin
      if (saetze[q].gurtzeug = suchstring) then
      begin
      index:=q;
      Listbox1.Items.Add(IntToStr(index+1)+'. '+saetze[q].gurtzeug); //zeigt alle Suchergebnisse in Listbox an, die den Suchkriterien entsprechen
    end;
    end;
  if index > -1 then
    begin
     edit1.text:=saetze[index].gurtzeug;
     edit2.text:=IntToStr(saetze[index].baujahr1);
     edit3.text:=IntToStr(saetze[index].spruenge1);

 
     edit4.text:=saetze[index].hauptschirm;
     edit5.text:=IntToStr(saetze[index].baujahr2);
     edit6.text:=IntToStr(saetze[index].spruenge2);

 
     edit7.text:=saetze[index].reserve;
     edit8.text:=IntToStr(saetze[index].baujahr3);
     edit9.text:=IntToStr(saetze[index].spruenge3);

 
     edit10.text:=saetze[index].aad;
     edit11.text:=IntToStr(saetze[index].baujahr4);
     edit12.text:=IntToStr(saetze[index].spruenge4);

 
     Edit13.Text:=IntToStr(saetze[index].preis);

 
     Edit14.Text:=IntToStr(saetze[index].index);

 
    end

 
    Else
    begin
    ShowMessage('Leider keine Treffer gefunden!');
    end;

 
    end;

Ich weiß nun allerdings nicht, wie das mit der ListBox genau geht, dass mir per Klick die richtigen Daten ausgelesen werden.

Also ich denke mir, dass ich ungefähr so was eintragen muss:

Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
begin

 
     edit1.text:=saetze[r].gurtzeug;
     edit2.text:=IntToStr(saetze[r].baujahr1);
     edit3.text:=IntToStr(saetze[r].spruenge1);

 
     edit4.text:=saetze[r].hauptschirm;
     edit5.text:=IntToStr(saetze[r].baujahr2);
     edit6.text:=IntToStr(saetze[r].spruenge2);

 
     edit7.text:=saetze[r].reserve;
     edit8.text:=IntToStr(saetze[r].baujahr3);
     edit9.text:=IntToStr(saetze[r].spruenge3);

 
     edit10.text:=saetze[r].aad;
     edit11.text:=IntToStr(saetze[r].baujahr4);
     edit12.text:=IntToStr(saetze[r].spruenge4);

 
     Edit13.Text:=IntToStr(saetze[r].preis);

 
     Edit14.Text:=IntToStr(saetze[r].index);

 
end;
Wenn ich das jedoch so mache, zeigt der mir immer nur den ersten Eintrag im Datensatz an.
Der soll aber „erkennen“, welchen Datensatz ich gerade in der ListBox anklicke und soll genau dessen Eigenschaften in die Edit-Felder eintragen

Irgendwie kann das doch gar nicht so schwer sein, aber ich komm an dieser Stelle echt nicht mehr weiter

Ich hoffe, ihr könnt mir den entscheidenden Tipp geben

Danke!
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Per Klick auf Listboxeintrag bestimmten Datensatz ausles

  Alt 20. Dez 2005, 20:28
Hi,
schau dir mal bei der Listbox die Eigenschaft ItemIndex an (siehe OH), das sollte dir weiter helfen.
Zudem kannst du auch in einem TStrings (benutzt eine ListBox) Objekte zu jedem Eintrag hinzu fügen. Wenn da jetzt die weiteren Daten drin stünden...

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Rayne

Registriert seit: 27. Nov 2005
7 Beiträge
 
#3

Re: Per Klick auf Listboxeintrag bestimmten Datensatz ausles

  Alt 20. Dez 2005, 21:57
Hm, danke erstmal für die Antwort, aber so richtig viel kann ich damit auch nicht anfangen, leider.

Was zum Beispiel bringt mir der ItemIndex der ListBox? Damit kann ich doch eigentlich nur gucken, welcher Eintrag in der ListBox ausgewählt worden ist, oder?

Aber der beispielsweise 2. Eintrag in der ListBox muss doch nicht gleich dem 2. Eintrag in meiner Datei sein

Angenommen Klaus 1 befindet sich in der Datei an Stelle 5 und Klaus 2 an Stelle 7. Dann werden ja bei der Suche beide Klaus' in der ListBox angezeigt an Stelle 1 und 2. Was bringt es mir dann also, wenn ich rauskriege, dass Klaus 1 an Stelle 1 in der ListBox steht (in der Datei aber an Stelle5)?

Oder verstehe ich das falsch?
Ich bin total verwirrt *g*
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Per Klick auf Listboxeintrag bestimmten Datensatz ausles

  Alt 20. Dez 2005, 23:07
du kannst einer Listbox anstatt mit "Add" per "AddObject" einen zweiten Paramter übergeben, der versteckt mitgeführt wird. Du kannst darin einen Integerwert bzw. Pointer speichern.
Normalerweise kannst du damit den Zeiger auf ein Objekt abspeichern, deshalb der name "AddObject"

Du solltest versuchen, jedem deiner Datensätze eine eindeutige Nummer zuzuweisen, eine ID also.
Dies ist sozusagen Pflicht, wenn man vorhat, ein wenig mehr mit solchen Datensätzen zu jonglieren und ist auch bei "richtigen" Datenbank-Realisationen normal.

Wenn jeder Datensatz eine eindeutige ID hat, ist es somit egal, wie viele "Klaus" etc. es gibt, denn nach einem Klick auf die Liste wird nicht nach dem Namen (z.B "Klaus") gesucht, sondern es wird die in der Liste mitgespeicherte ID geholt und der entsprechende Datensatz gesucht.
Dies geschieht wie gesagt, indem du vorher die List mit "AddObject" füllst.


Also etwa so:

Listbox1.Items.AddObject('Klaus', TObject(1)); Die "1" soll in diesem Fall einfach die ID des Datensatzes darstellen. Jeder Datensatz muss natürlich seine eigene Nummer haben, die du auch mit in der Datei speichern solltest.
Da der Compiler normalerweise einen Pointer auf ein Objekt erwartet, gaukeln wir ihm mit "TObject()" vor, es sei an dieser Stelle eins.

Um die Daten (die ID) nach einem Klick auszulesen, kannst du folgendes machen:

Delphi-Quellcode:
var ID : integer;
// ...
ID:= Integer(ListBox1.Items.Objects[Listbox1.itemindex]);
Wir sagen dem Compiler, dass er den Pointer als Integer-Wert interpretieren soll (da er ja normalerweise dort einen Pointer auf ein Objekt erwartet). Über die "Objects[]"-Methode lesen wird also die Adresse aus, wo wir ja vorher die ID abgespeichert hatten.


So, ich hoffe es soweit richtig erklärt zu haben, da ich es selbst erst vor kurzem hier gelernt habe...


Gruß
Pfoto
Jürgen Höfs
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:28 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