如何在运行时获取 FMX TComboBox 的 Item.LookupData 和 SelectedValue(作为整数)?
How to get Item.LookupData and SelectedValue (as integer) of an FMX TComboBox at runtime?
FMX 表格上有一个 ComboBox
。它以以下方式与数据源(table 绑定 id
-integer 和 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
存储在哪里以及如何获取它(作为整数)?
tm。
您必须在组合的 SelectedValue 与其他控件之间设置实时绑定 link。
我附上了绑定编辑器的截图。
标签将显示 ID。
我目前正在使用以下方式解决问题。
我按以下方式处理 OnFillingListItem
事件并将 ID 号存储在 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。这给了我一个可靠的 ID。
您可以通过定义绑定的 TLinkFillControl
访问所选项目的 id
值:
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 将值内部存储在字典中。
ComboBox1.ItemIndex
是你所需要的。
要获取与所选项目关联的文本,您可以执行以下操作:
Text := ComboBox1.Items[ ComboBox1.ItemIndex ];
参见:http://docwiki.embarcadero.com/Libraries/Sydney/en/FMX.ListBox.TCustomComboBox.ItemIndex
FMX 表格上有一个 ComboBox
。它以以下方式与数据源(table 绑定 id
-integer 和 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
存储在哪里以及如何获取它(作为整数)?
tm。
您必须在组合的 SelectedValue 与其他控件之间设置实时绑定 link。
我附上了绑定编辑器的截图。
标签将显示 ID。
我目前正在使用以下方式解决问题。
我按以下方式处理 OnFillingListItem
事件并将 ID 号存储在 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。这给了我一个可靠的 ID。
您可以通过定义绑定的 TLinkFillControl
访问所选项目的 id
值:
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 将值内部存储在字典中。
ComboBox1.ItemIndex
是你所需要的。
要获取与所选项目关联的文本,您可以执行以下操作:
Text := ComboBox1.Items[ ComboBox1.ItemIndex ];
参见:http://docwiki.embarcadero.com/Libraries/Sydney/en/FMX.ListBox.TCustomComboBox.ItemIndex