AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ComboBox mit mehreren Spalten?

Ein Thema von Stefan H. · begonnen am 29. Mai 2004 · letzter Beitrag vom 15. Dez 2014
Antwort Antwort
Seite 1 von 2  1 2      
Stefan H.

Registriert seit: 10. Dez 2003
12 Beiträge
 
Delphi 6 Personal
 
#1

ComboBox mit mehreren Spalten?

  Alt 29. Mai 2004, 09:47
Hallo Leute,

leider bin ich noch blutiger Delphi-Anfänger und deshalb habe ich eine Frage an die Fachleute.

Ist es eigentlich möglich, in der Standard-ComboBox mehrere Spalten darzustellen und wenn ja, wie macht man so etwas. Ich möchte meine Access-Frontend Datenbank als Delphi-Programm umschreiben und bei meiner Access-Datenbank benutze ich sehr häufig die ComboBox mit mehreren Spalten.

Folgendes Beispiel: Ich möchte eine Benutzerauswahl über eine ComboBox machen.
1. Spalte = Personalnummer (nicht sichtbar z.B. Spaltenbreite 0cm!)
2. Spalte = Name (soll angezeigt werden!)

Es soll aber nur der Name angezeigt werden, die Personalnummer soll nicht sichtbar sein und dient nur zur eindeutigen Identifikation des Benutzers - sozusagen als Rückgabewert den ich dann für weitere Abfragen weiterverwenden kann.

Kann ich so etwas auch mit Delphi6 Personal-Edition machen?
Für die Datenbank-Verbindung benutze ich KaDao (Freeware).

Ich hoffe, dass mir evtl. jemand weiterhelfen kann ansonsten brauche ich erst gar nicht anfangen.

Danke im Voraus!

MfG
Stefan H.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: ComboBox mit mehreren Spalten?

  Alt 29. Mai 2004, 09:49
Wenn du eh nur eine sehen willst, dann benutze die Methode AddObject von Item -> http://www.delphipraxis.net/internal...hlight=listbox
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#3

Re: ComboBox mit mehreren Spalten?

  Alt 29. Mai 2004, 11:04
Vielleicht hilft dir sonst auch das hier:
http://www.swissdelphicenter.ch/de/showcode.php?id=580
Oder habe ich dich falsch verstanden?
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: ComboBox mit mehreren Spalten?

  Alt 29. Mai 2004, 11:25
so Legt man ein (bzw. 3) Item(s) mit dazugehöriger PersonalNummer an
Delphi-Quellcode:
var LPersonalnummer: String;
begin
  LPersonalnummer := 'Personalnummer 3094d';
  Combobox1.Items.AddObject('Hansmüller', TObject(LPersonalnummer));

  LPersonalnummer := 'Personalnummer 394d0';
  Combobox1.Items.AddObject('Fritz walter', TObject(LPersonalnummer));

  LPersonalnummer := 'Personalnummer 08173';
  Combobox1.Items.AddObject('Max mustermann', TObject(LPersonalnummer));
Uns so lässt du dir die personalnummer von dem ausgewählten Item anzeigen
  showmessage(String(Combobox1.Items.Objects[ComboBox1.ItemIndex]));
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: ComboBox mit mehreren Spalten?

  Alt 29. Mai 2004, 11:26
@SirThornberry: Habe ich alles in der Code-Lib erklärt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: ComboBox mit mehreren Spalten?

  Alt 29. Mai 2004, 11:31
@Luckie: jetzt wo du es sagst seh ichs *g* hab den link nicht angeschaut. Aber da er ja nur eine personalnummer haben will ist mein beispiel denk ich einfacher zu verstehen. Das "new" und "dispose" verwirrt ihn vielleicht nur - ansonsten wenn er mehr als nur nen string speichern will dann ist dein beitrag aus der codelib eindeutig besser
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Stefan H.

Registriert seit: 10. Dez 2003
12 Beiträge
 
Delphi 6 Personal
 
#7

Re: ComboBox mit mehreren Spalten?

  Alt 29. Mai 2004, 14:20
Hallo!

Vielen, vielen Dank nochmals für die schnellen Antworten.
Ich werde das mit dem AddObject mal ausprobieren.

Wünsche allen noch ein schönes Wochenende!!!

MfG
Stefan H.
  Mit Zitat antworten Zitat
Carsten Schmitz

Registriert seit: 28. Mai 2007
3 Beiträge
 
#8

Re: ComboBox mit mehreren Spalten?

  Alt 28. Mai 2007, 23:15
Zitat von SirThornberry:
so Legt man ein (bzw. 3) Item(s) mit dazugehöriger PersonalNummer an
Delphi-Quellcode:
var LPersonalnummer: String;
begin
  LPersonalnummer := 'Personalnummer 3094d';
  Combobox1.Items.AddObject('Hansmüller', TObject(LPersonalnummer));

  LPersonalnummer := 'Personalnummer 394d0';
  Combobox1.Items.AddObject('Fritz walter', TObject(LPersonalnummer));

  LPersonalnummer := 'Personalnummer 08173';
  Combobox1.Items.AddObject('Max mustermann', TObject(LPersonalnummer));
Uns so lässt du dir die personalnummer von dem ausgewählten Item anzeigen
  showmessage(String(Combobox1.Items.Objects[ComboBox1.ItemIndex]));
Der Tip mit dem "AddObject" hat mir wirklich sehr gut gefallen und hat mir bei meinem Problem geholfen. Ich benötige jetzt allerdings noch eine weitere Variation und versuche mal, den Sachverhalt mit den hier benutzten Variablen zu beschreiben.
Ich habe in meinem D5-Programm eine TComboBox-Komponente, die mehrere Items (Personennamen) enthält. Damit ich in der dahinterliegenden Datenbank (Firebird 2.0) nur eine ID speichere (z.B. "LPersonalnummer), habe ich diese ID in der ComboBox dem jeweiligen Item, wie von Dir beschrieben, mit AddObjects hinzugefügt.
Soweit so gut, nun zum Problem:
Ich möchte, wenn ich in einem TDBGrid durch die Datenmenge scrolle, die jeweilige Personalnummer aus der Datenbank holen und über diese ID das Item in der ComboBox ermitteln, dessen Personalnummer der ID des Datensatzes entspricht. Denn Ziel ist es, das zugehörige Item in der ComboBox auszuwählen und den Personennamen anzuzeigen.

Ich hoffe, jemand kann mir einen guten und performanten Tip geben.

Grüsse,
Carsten
  Mit Zitat antworten Zitat
Gremlin

Registriert seit: 18. Apr 2006
Ort: Im Süden
177 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: ComboBox mit mehreren Spalten?

  Alt 28. Mai 2007, 23:48
Hallo Carsten,

du hast eine Combo mit den Paaren ID, Personalname und eine Tabelle mit einem ID-Feld? Wenn du über die Tabelle scrollst, suchst du mit dem ID-Feld der Tabelle in der Combo, stimmt das soweit?

Nehmen wir an du suchst über einen Integer (Code so aus dem Kopf)

Delphi-Quellcode:

procedure <DeineForm>.SearchInCombo(Value:integer);
var
  i: integer;
begin
  for i := 0 to <ComboBox>.Items.Count-1 do begin
    if (integer(<ComboBox>.Items.Objects[i])=Value) then begin
      <ComboBox>.ItemIndex := i;
      Break;
    end;
  end;
end;
Ist deine ID ein String, dann musst du den Code eben schnell auf String-Werte anpassen. Du kannst in den Beiträgen weiter oben nachschauen.

Jedoch hast du für diese Lösung immer noch das Problem, das für nicht gefundene IS-Werte, zumindest der letzte Wert angezeigt wird. Sollte dies nicht gewünscht sein, so musst du anstatt dem Break ein Exit verwenden und am Ende der Schleife den ItemIndex auf -1 setzen.

Delphi-Quellcode:

procedure <DeineForm>.SearchInCombo(Value:integer);
var
  i: integer;
begin
  for i := 0 to <ComboBox>.Items.Count-1 do begin
    if (integer(<ComboBox>.Items.Objects[i])=Value) then begin
      <ComboBox>.ItemIndex := i;
      Exit;
    end;
  end;
  <ComboBox>.ItemIndex := -1;
end;
BTW: Warum nimmst du nicht zwei Tabellen (die Tabelle mit dem ID-Feld hast du schon, fehlt noch die 2. Tabelle mit den Werten für ID und Personalname), einen Query zur Suche in der 2. Tabelle und einer Ausgabe über ein Label oder ein ReadOnly-Editfeld. Dies könnte viel schneller sein, natürlich abhängig von der Anzahl der Daten.
Gruss Gremlin
  Mit Zitat antworten Zitat
Carsten Schmitz

Registriert seit: 28. Mai 2007
3 Beiträge
 
#10

Re: ComboBox mit mehreren Spalten?

  Alt 29. Mai 2007, 14:08
Hi Gremlin,

Vielen Dank für Dein ausführliches Beispiel. Meine Daten haben am Anfang ungefähr eine Größe von ca. 3.000 Datensätzen, später evtl. 30.000.

Das mit der FOR-Schleife habe ich mir auch schon überlegt. Ein Vorteil ist, daß die Berechnungen im Hauptspeicher ausgeführt werden, jedoch kann es auch lange dauern, wenn diese Schleife bis zu einige tausend Male aufgerufen wird.
Das mit der Query zur Suche in der 2. Tabelle ist unter diesen Umständen vielleicht doch günstiger. Die Ausgabe würde ich weiterhin in der ComboBox belassen, da man über die Funktion "ComboBox.Items.IndexOf" relativ schnell das zugehörige Item ermitteln kann.
Oder gibt es weitere Argumente für ein Label oder ein Readonly-Editfeld ?

Mir fällt noch eine dritte Möglichkeit ein, die ich hier kurz skizzieren möchte:
Parallel zum Füllen der ComboBox erzeuge ich eine StringList mit KeyValue-Werten (Bezeichner=Wert). Bezeichner würde in diesem Fall die ID sein und Wert würde der jeweils dazugehörige Name sein. Nur wie stelle ich es da an, mit dem Wert der ID direkt auf den Wert zuzugreifen ?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:23 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