dbGrid、cxGrid下拉列表做单、多列更新的三种实现方式
作者学习Delphi的开发环境:
Win10
MSSQL2014
Delphi XE 10.1 Update 2
一、ADOQuery查找字段,实现多字段更新。(只用ADOQuery查找字段的话下拉列表只有一列)
1、双击ADOQuery1
2、右键-New field
3、网上的教材多只介绍到单字段的更新,没有介绍到多字段的更新,多字段的更新要点在于用lookup keys中的字段更新key fields中的字段时,多个字段用“ ; ”号隔开。
二、cxGrid中对查找字段配置LookupComboBox属性,实现多字段更新。(下拉列表可以有多列)
然后在OnEditValueChanged事件中执行代码。(备注:OnCloseUp事件是指下拉列表收起的事件)
procedure TForm1.cxGrid1DBTableView1RecordNamePropertiesEditValueChanged( Sender: TObject);
begin
//更新时一定要有顺序才行,第一个字段要是DataBinding中的FieldName字段,要不然会变回原来的值。ADOQuery3为下拉列表数据集。
ADOQuery1.FieldByName(‘RecordName’).Value:=ADOQuery3.FieldByName(‘材质’).Value ;
ADOQuery1.FieldByName(‘ModelName’).Value:=ADOQuery3.FieldByName(‘编号’).Value ;
end;
三、ADOQuery查找字段 + cxGrid中对查找字段配置LookupComboBox属性。
在方法一的基础上,对方法一新增的查找字段TEST配置LookupComboBox属性。
Properties中不需要设置ListSource,只需要设置ListFiledNames即可,KeyFieldNames中会自动带出查找字段TEST的LookupKeyFields字段。这就是为什么Properties中KeyFieldNames会带‘s’的原因了。
本教程缘起:
初学习Delphi,想要实现在从表中用下拉方式做单,选择数据后可以将下拉列表数据集中的多个字段信息带到从表中(注:下拉列表数据集中的字段,有的并没有显示在下拉列表中)。
刚开始遇到的难点:
直接通过cxGrid的LookupComboBox属性中的ONEditValueChanged事件,用LookupComboBox中的ListSource对应的数据集对从表的数据集进行修改,但ONEditValueChanged事件中只要修改从表数据集,LookupComboBox字段值就会变回原来的值。
如果不配置LookupComboBox中的KeyFieldNames属性,可以用LookupComboBox中的ListSource对应的数据集对从表的数据集进行修改,但是LookupComboBox字段没有值,也不行。
(注:后面试探出来了,更新时一定要有顺序才行)
网上搜索了大量信息没有找到要点。这个问题困扰了好些日子,通过摸索发现了下拉列表多字段更新的三种方式,故分享出来,希望对大家有所利益。尤其是新学Delphi的朋友,因为高手肯定知道,只不过高手展现给新手的宝贵资料不多。可能是懒得整理。