我正在尝试使用LiveBindings构建类似TLookupComboBox
的内容。
我在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中填充了text
字段中的值,所以我认为我已正确设置它。
如何从代码中获取SelectedValue
?
我可以在视觉上将值绑定到TLabel
,然后我可以阅读TLabel.Caption
,但肯定有更简单的方法吗?
PS:我不想将值存储在数据库中,否则我只会使用TDBLookupComboBox
。
编辑:我尝试使用TPrototypeBindSource
,但没有明显的方法可以从代码中访问字段。我也尝试使用第二个TBindSourceDB
和TClientDataSet
一起工作,但感觉就像用大锤敲打坚果一样。
答案 0 :(得分:2)
您可以通过相应的TLinkFillControlToField
:
procedure TForm1.ComboBox1Change(Sender: TObject);
var
SelectedValue: Integer;
begin
if TryStrToInt(LinkFillControlToField1.BindList.GetSelectedValue.AsString, SelectedValue) then
DoSomethingWith(SelectedValue);
end;
答案 1 :(得分:-1)
也许这可以帮到你。您可以添加名为selectedIndex
的全局变量,然后双击组合框。它将带来ComboBoxChange
事件。然后编写下面的代码:
selectedIndex := combobox1.ItemIndex;