如何实现具有非列表值的TDataSet绑定组合框

时间:2015-04-15 09:50:32

标签: delphi combobox dataset delphi-xe4

我需要实现一个组合框,它绑定到TpFIBDataSetTDataSet的后代)。我以前做了好几次。如果它只包含预定义的值,那就不是什么大事了。

这一次,我想要一个接受用户输入的自定义值的组合框,同时也让用户能够选择一些预定义的值。在组合框的字段所属的记录发布之前,新输入的值应插入到数据库的某个表中。

在我看来,主要问题是预定义的值在内部表示为整数ID(我使用的组合框是来自Roy Woll的 InfoPower 包的TwwDBComboBox,因为它实现了maplist功能),因为该字段是外键,而自定义值几乎可以是所有内容(仅限于掩码) 如何区分整数ID和整数用户输入,例如?

请参阅组合框的设置属性:

AComboBox.Style   := csDropDown;
AComboBox.MapList := True;

我没有请求解决方案,因为接受这段代码并且很开心。我宁愿寻找可能有或有类似问题的其他人的建议。

1 个答案:

答案 0 :(得分:0)

  

例如,如何区分整数ID和整数用户输入?

您返回数据库。直接查询select count(*) from table where id = ComboBoxId 或者使用数据集的Locate方法 或者在MyList: TList<Integer>中保留一个缓存,并执行MyList.BinarySearch以查看该项目是否已存在于数据库中。
显然,缓存仅在数据库是单用户时才有效,否则您将无法使其保持最新状态。

如果它不在DB中,则运行insert查询。 插入后,您运行默认的组合框行为,因为现在值肯定在数据库中。