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的朋友,因为高手肯定知道,只不过高手展现给新手的宝贵资料不多。可能是懒得整理。

posted on 2021-01-27 10:30  癫狂编程  阅读(764)  评论(0编辑  收藏  举报

导航

好的代码像粥一样,都是用时间熬出来的