另外,如果我正在加载先前保存的数据库记录,已选择Index 2 "Quick Elimination",如何使DBLookupComboBox显示所选条目?
是的,"Please Select"是索引0,并且作为查询的一部分进行检索。
另外,如果我正在加载先前保存的数据库记录,已选择Index 2 "Quick Elimination",如何使DBLookupComboBox显示所选条目?
是的,"Please Select"是索引0,并且作为查询的一部分进行检索。
dbluLookup.KeyValue := dbluLookup.ListSource.DataSet.FieldByName(dbluLookup.KeyField).Value;
这只是将KeyValue设置为ListSource数据集中的第一条记录,这应该是行“请选择”。
我猜测底层表字段的值为NULL而不是零,这告诉DBComboBox尚未选择任何值并相应地显示。
如果表中的值为零,则我认为组合框编辑字段中的文本将被选中以指示该值,但我可能记错了。
无论如何,只需检查Field1.IsNull(或IsEmpty),然后将其设置为零。这意味着您不能再区分“未知值”(NULL)和“未选择的值”(零),除非您防止零值返回到表中...
DBLookupComboBox
默认显示与 ListSource
中的 KeyField
匹配的 DataField
的 ListField(s)
。因此,为了确保在 DataField
为空时显示某个值,您必须在 ListSource
中提供一个 NULL 的 KeyField
。但是,人们可能不希望在与 ListSource
相关联的底层表中有 NULL 值。
解决这个问题的一种方法是使用 UNION SELECT
将 NULL 值添加到 ListSource
后面的数据集中。这应该可以正常工作,因为该数据集不需要可编辑。
现在,为了确保只有在向与 DataSource
相关联的数据集添加新记录时才能使用这个特殊的数据集,在 DataSource.OnStateChange
中管理 ListSource.DataSet
的查询。当 DataSource.State = dsInsert
时,更新 ListSource.DataSet
。
在 TwwDBLookupCombo、InfoPower 组件中修改 Steve Childs 的答案
cboFilterTravel1.LookupValue := cboFilterTravel1.LookupTable.FieldByName(cboFilterTravel1.LookupField).Value;
谢谢 Steve,这对我有用