如何在Delphi DBLookupComboBox中选择正确的项目

时间:2011-08-27 02:41:00

标签: database delphi lookup

我有一个连接到数据库查询的 DBLookupComboBox 。那部分工作正常。当我运行程序时, DBLookupComboBox 会填充查询结果。我想在程序首次运行时看到 DBLookupComboBox 填充第一项“请选择”新项目操作已启动。 (见下图)

enter image description here

此外,如果我正在加载以前保存的已选择索引2“快速消除”的数据库记录,我如何让 DBLookupComboBox 显示所选条目?

是的,“请选择”是索引0,它将作为查询的一部分进行检索。

5 个答案:

答案 0 :(得分:5)

你可以试试这个(我知道你现在已经解决了它,正如你2年前提出的那样),但万一其他人有兴趣...

dbluLookup.KeyValue := dbluLookup.ListSource.DataSet.FieldByName(dbluLookup.KeyField).Value;

只需将KeyValue设置为ListSource数据集中的第一条记录,该记录应为“请选择”行。

答案 1 :(得分:1)

这样做的一种方法是将“请选择”添加到您选择的基础表中,此元组的键将为0.然后当您显示组合框并且连接字段的值为0,将显示“请选择”。当然,您必须确保永远不会选择此值!

答案 2 :(得分:1)

我的猜测是底层表字段的值是NULL而不是零,这告诉DBComboBox没有选择任何值并且它会相应地显示。

如果表中的值为零,我认为将选择组合编辑字段中的文本来指示,但我可能会错误地回想起这一点。

无论如何,只需检查Field1.IsNull(或IsEmpty)然后将其设置为零。这意味着你不能再区分“未知值”(NULL)和“无选择值”(零),除非你阻止零值重新进入表格......

答案 3 :(得分:1)

DBLookupComboBox默认显示ListField(s) KeyField ListSourceDataField中的DataSource相匹配。因此,为了确保显示DataField为NULL的某些值,您必须在KeyField中提供ListSource NULL。但可以想象,不希望在与ListSource关联的下垫表中使用NULL值。

避免这种情况的一种方法是使用ListSource将{NULL}值添加到UNION SELECT后面的数据集中。这应该可以正常工作,因为该数据集不必是可编辑的。

现在,为确保此特殊数据集仅在您向DataSource关联的数据集添加新记录时可用,请在ListSource.DataSet中管理DataSource.OnStateChange的查询。在DataSource.State = dsInsert时,请更新ListSource.DataSet

答案 4 :(得分:0)

Steve Childs对TwwDBLookupCombo,InfoPower组件

的修改
cboFilterTravel1.LookupValue := cboFilterTravel1.LookupTable.FieldByName(cboFilterTravel1.LookupField).Value;

感谢Steve It为我工作