4

我正在尝试构建类似TLookupComboBox使用 LiveBindings 的东西。

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

然后我使用 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 设计器如下所示:

BindSourceDB1 连接到 ComboBox1

ComboBox 填充了 field 中的值text,所以我认为我设置正确。

我怎样才能得到SelectedValue来自代码?

我可以直观地将值绑定到 aTLabel然后我可以读取TLabel.Caption,但肯定有更简单的方法吗?

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

编辑:我尝试使用 a TPrototypeBindSource,但是没有明显的方法可以从代码中访问字段。我也尝试过将第二个TBindSourceDB与 which 一起使用TClientDataSet,但这感觉就像用大锤敲击坚果。

4

2 回答 2

2

您可以通过相应的访问选定的值TLinkFillControlToField

procedure TForm1.ComboBox1Change(Sender: TObject);
var
    SelectedValue: Integer;
begin
    if TryStrToInt(LinkFillControlToField1.BindList.GetSelectedValue.AsString, SelectedValue) then
      DoSomethingWith(SelectedValue);
end;
于 2016-04-08T09:00:59.200 回答
-1

也许这可以帮助你。您可以添加一个名为 的全局变量selectedIndex,然后双击组合框。它将带来ComboBoxChange事件。然后编写下面的代码:

selectedIndex := combobox1.ItemIndex;
于 2014-07-10T20:34:32.463 回答