如何从代码中获取ComboBox的SelectedValue?

时间:2014-05-17 14:24:30

标签: delphi vcl delphi-xe3 livebindings

我正在尝试使用LiveBindings构建类似TLookupComboBox的内容。

我在VCL表单上放置了一个普通的TComboBox。我还有一个数据集,其中一些行包含两个字段idtext

然后我使用LiveBindings编辑器创建TBindSourceDBTBindingsList

其中只有一个绑定:

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

如您所见,我有FillValueFieldNameFillDisplayFieldName的不同字段。

LiveBindings设计器如下所示:

BindSourceDB1 connected to ComboBox1

ComboBox中填充了text字段中的值,所以我认为我已正确设置它。

如何从代码中获取SelectedValue

我可以在视觉上将值绑定到TLabel,然后我可以阅读TLabel.Caption,但肯定有更简单的方法吗?

PS:我不想将值存储在数据库中,否则我只会使用TDBLookupComboBox

编辑:我尝试使用TPrototypeBindSource,但没有明显的方法可以从代码中访问字段。我也尝试使用第二个TBindSourceDBTClientDataSet一起工作,但感觉就像用大锤敲打坚果一样。

2 个答案:

答案 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;