Łączenie atrybutów w comboboxie

0

Witam potrzebuje wrzucic do comboboxa zawartość tabeli osoba w taki sposób aby po rozwinięciu pokazywane informacie były w formacie id_osoby Nazwisko. Robiłem dokładnie taką samą czynność w c# lecz w delphi nie mam pomysłu. Aktualnie mam tak i wyświetla mi tylko id

 procedure TForm1.ComboBox1Enter(Sender: TObject);

       var Q: TAdoQuery;
begin



  try

    combobox1.items.Clear;
    Q := TAdoQuery.Create(Self);
    try
      Q.Connection := ADOConnection1;
      Q.SQL.Text := 'SELECT * FROM osoba';
      Q.Open;
      while not Q.Eof do
      begin
        combobox1.Items.AddObject(Q.FieldByName('id_osoby').AsString ,  TObject(Q.FieldByName('nazwisko').AsString));              Nie wiem jak zmodyfikować tą linie aby to działało.
        Q.Next;
      end;
    finally
      Q.Free;
    end;
  finally
  combobox1.Items.EndUpdate;

  end;
     end;

0

Metoda AddObject dodaje do listy po pierwsze ciąg znaków, a dodatkowo umożliwia dorzucenie pointera na dodatkowe dane. Owe dodatkowe dane nie są w żaden sposób automatycznie wyświetlane w komponencie, więc nie dziw się, że tylko ID jest wyświetlane. Już pomijam to czy zrzutowanie typu String na TObject ma jakikolwiek sens i czy ma to prawo działać prawidłowo.

Rozwiązanie jest proste - buduj łańcuch z dwóch fragmentów (ID i nazwisko), a następnie tak przygotowany ciąg dodawaj do listy za pomocą podstawowej metody Add. Przykład niżej.

procedure TForm1.ComboBox1Enter(Sender: TObject);
var
  Q: TAdoQuery;
  Value: String;
begin
  try
    ComboBox1.Items.Clear();
    
    Q := TAdoQuery.Create(Self);
    try
      Q.Connection := ADOConnection1;
      Q.SQL.Text := 'SELECT * FROM osoba';
      Q.Open();

      while not Q.Eof do
      begin
        Value := Q.FieldByName('id_osoby').AsString + ' ' + Q.FieldByName('nazwisko').AsString;
        ComboBox1.Items.Add(Value);

        Q.Next();
      end;
    finally
      Q.Free();
    end;
  finally
    ComboBox1.Items.EndUpdate();
  end;
end;

Poza tym nigdzie nie wywołujesz BeginUpdate, więc EndUpdate z tyłka pochodzi.

0

dodawanie
combobox1.Items.AddObject(Q.FieldByName('nazwisko').AsString, TObject(Q.FieldByName('id_osoby').AsInteger));
pobieranie id wybranego itema
Integer(combobox1.Items.Objects[combobox1.ItemIndex])
pole id_osoby musi być liczbą całkowitą

1 użytkowników online, w tym zalogowanych: 0, gości: 1