我正在尝试使用LiveBindings构建类似TLookupComboBox的东西. 我在VCL表单上放置了一个普通的TComboBox.我还有一个数据集,其中包含两个字段id和text的行. 然后我使用LiveBindings编辑器创建了一个
我在VCL表单上放置了一个普通的TComboBox.我还有一个数据集,其中包含两个字段id和text的行.
然后我使用LiveBindings编辑器创建了一个TBindSourceDB和一个TBindingsList.
它只有一个绑定:
object BindingsList1: TBindingsList
Methods = <>
OutputConverters = <>
UseAppManager = True
Left = 244
Top = 229
object LinkFillControlToField1: TLinkFillControlToField
Category = 'Quick Bindings'
Control = ComboBox1
Track = True
FillDataSource = BindSourceDB1
FillValueFieldName = 'id'
FillDisplayFieldName = 'text'
AutoFill = True
BufferCount = -1
FillExpressions = <>
end
end
如您所见,我有FillValueFieldName和FillDisplayFieldName的不同字段.
LiveBindings设计器如下所示:
ComboBox中填充了字段文本中的值,所以我认为我正确设置了它.
如何从代码中获取SelectedValue?
我可以在视觉上将值绑定到TLabel,然后我可以读取TLabel.Caption,但肯定有更简单的方法吗?
PS:我不想将值存储在DB中,否则我只想使用TDBLookupComboBox.
编辑:我曾尝试使用TPrototypeBindSource,但没有明显的方法从代码访问字段.我还尝试使用第二个TBindSourceDB和一个有效的TClientDataSet,但感觉就像使用大锤来破解坚果一样.
您可以通过相应的TLinkFillControlToField访问所选值:procedure TForm1.ComboBox1Change(Sender: TObject);
var
SelectedValue: Integer;
begin
if TryStrToInt(LinkFillControlToField1.BindList.GetSelectedValue.AsString, SelectedValue) then
DoSomethingWith(SelectedValue);
end;
