我有一个TDBLookupComboBox
,显示的是TStringField
类型的fkLookup
,它允许Null
值(来自可空的Integer数据库列)。
下拉列表显示分配的LookupDataSet
中的项目,这些项目来自联接表。如果该字段为Null
,则不显示任何列表项,组合框为空。如果该字段具有值,则会显示正确的描述。
我可以通过按分配的Null
将其重置为NullValueKey
。
没关系,但是用户更喜欢使用鼠标。因此,我可以提供一个明确的按钮,但我认为在列表顶部再增加一行会更好。我该怎么办?
答案 0 :(得分:3)
您可以在查询中放入空行,如果需要对其进行排序,可以使它显示在列表的顶部,如下所示:
select 0 as sort,
convert(int, null) as UserID,
'Clear' as Name
union all
select 1 as sort,
u.UserID,
u.Name
from tblUser u
order by sort, Name
sort
列将显示在顶部,之后您可以根据需要进行排序。
答案 1 :(得分:1)
您可以将查询与下一个SQL(Firebird语法)一起用作LookupDataSet
SELECT CAST (NULL AS INTEGER) AS ID, CAST ('clear' AS VARCHAR(80)) AS NAME FROM table_name
UNION
SELECT ID, NAME FROM table_name
但是,在此实现中,clear
项将位于列表的末尾。
在聊天中我们讨论之后添加的
恐怕我们永远都不会达到像 normal 字段那样的空值字段的行为,因为null不是一个值,正如这里正确提到的:https://petercai.com/null-is-not-a-value/。我们只能为此采取一些解决方法。
例如,我们可以看到自定义显示的null值,例如SELECT CASE WHEN OurField IS NULL THEN '(empty)' ELSE OurField END AS OurField
。我们可以使用人工菜单项设置null。但这不是完整,复杂的解决方案。
答案 2 :(得分:0)