如何在运行时获取FMX TComboBox的Item.LookupData和SelectedValue(作为整数)?

时间:2015-07-16 11:34:35

标签: delphi combobox firemonkey livebindings

FMX表格上有ComboBox。它以下列方式与数据源(具有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 个答案:

答案 0 :(得分:2)

TM。 您必须在组合的SelectedValue与其他控件之间设置livebinding链接。 我附加了绑定编辑器的screehoot。 标签将显示ID。 enter image description here

答案 1 :(得分:2)

您可以通过定义绑定的buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.0.0' } } allprojects { repositories { jcenter() } } 访问所选项目的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会传递相应的绑定数据。如果我没记错的话,Delphi会在内部将值存储在字典中。

答案 2 :(得分:0)

我目前正在使用以下方法解决此问题。 我按以下方式处理OnFillingListItem事件,并在ComboBox项中存储ID号。我使用Tag属性虽然它实际上并不好。

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

稍后我从ListBox1.Selected.Tag中获取Item id。这给了我一个可靠的ID。

答案 3 :(得分:0)

ComboBox1.ItemIndex 就是您所需要的。

要获取与所选项目关联的文本,您可以执行以下操作:

Text := ComboBox1.Items[ ComboBox1.ItemIndex ];

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