Delphi DBGrid动态添加缓存值类lookup查找字段显示为空问题咨询
问题根源
出现下拉为空的核心原因是混用了Delphi的两种Lookup字段模式,同时存在多个错误配置:
- 模式冲突:
fkLookup是关联外部数据集的Lookup字段专用属性,当你需要用静态缓存的LookupList实现下拉时,不能设置FieldKind := fkLookup,保持默认的fkData即可 - 冗余配置:
LookupCache是外部数据集模式下用于缓存查询结果的属性,静态列表模式下不需要设置 - 多余操作:你已经通过
TStringField.Create直接创建了字段实例并绑定到数据集,后续调用p_StoredProc.FieldDefs.Add会覆盖你提前设置的Lookup相关属性,属于无效且有害的操作 - 可选校验:确认你
KeyFields指定的DateTypeID字段为整数类型,和你LookupList.Add的第一个参数(整数0/1/2/3/4)类型匹配,如果该字段是字符串类型,需要把Add的第一个参数改为字符串格式,例如LookupList.Add('0','')
修复后代码
with TStringField.Create(p_StoredProc) do begin FieldName := 'MDateTypeID'; DataSet := p_StoredProc; Name := DataSet.Name + FieldName; KeyFields := 'DateTypeID'; Lookup := True; LookupList.Add(0,''); LookupList.Add(1,'ATA(B)'); LookupList.Add(2,'Delivery Unloading'); LookupList.Add(3,'Invoice Date'); LookupList.Add(4,'Sales Date'); end;
内容的提问来源于stack exchange,提问作者Alex Delphi
相关产品推荐
相关产品推荐

