Как получить Item.LookupData и SelectedValue (как целое число) FMX TComboBox во время выполнения?

E сть ComboBox в форме FMX. Он связан с источником данных (таблица, которая имеет id-целое и speciality - поля Varchar) следующим образом-

object LinkFillControlToField1: TLinkFillControlToField
      Category = 'Quick Bindings'
      Control = ComboBox1
      Track = True
      FillDataSource = BindSourceDB1
      FillValueFieldName = 'id'
      FillDisplayFieldName = 'speciality'
      AutoFill = True
      BufferCount = -1
      AutoBufferCount = False
      FillExpressions = <>
      FillHeaderExpressions = <>
      FillBreakGroups = <>
    end

Получить доступ к значению выбранного просто speciality (от ComboBox1.Selected.Text) но я не могу найти способ получить доступ к id значение выбранного элемента без дополнительных запросов SQL. Где он хранится в TComboBox или его ListBox? Где SelectedValue и как его получить (как целое число)?

4 ответа

Решение

В настоящее время я использую следующий способ решения проблемы. Я справляюсь OnFillingListItem событие следующим образом и сохранить номер идентификатора в ComboBox Предметы. я использую Tag собственность, хотя это на самом деле не хорошо.

procedure TForm1.LinkFillControlToField1FillingListItem(Sender: TObject;
  const AEditor: IBindListEditorItem);
begin
  (AEditor.CurrentObject as TListBoxItem).Tag :=
    YourLookuptable.FieldByName('id').AsInteger;
end;

Позже я получаю идентификатор элемента из ListBox1.Selected.Tag. Это дает мне надежное удостоверение личности.

Вы можете получить доступ к id Значение выбранного элемента по TLinkFillControl который определяет привязку:

procedure TForm1.ComboBox1Change(Sender: TObject);
var
    Id: Integer;
begin
    if TryStrToInt(LinkFillControlToField1.BindList.GetSelectedValue.AsString, Id) then
      ShowMessage(IntToStr(Id));
end;

Если Item.LookupData связан, BindList.GetSelectedValue доставляет соответствующие связанные данные. Если я правильно помню, Delphi хранит значение внутри словаря.

Тм. Вы должны установить прямую привязку между SelectedValue комбо с другим элементом управления. Я приложил скриншот из обязательного редактора. Метка покажет идентификатор.

ComboBox1.ItemIndex - это все, что вам нужно.

Чтобы получить текст, связанный с выбранным элементом, вы можете сделать это: Text:= ComboBox1.Items[ComboBox1.ItemIndex];

См .: http://docwiki.embarcadero.com/Libraries/Sydney/en/FMX.ListBox.TCustomComboBox.ItemIndex

Другие вопросы по тегам