DBLookupCombobox实现下拉联动
通过网盘分享的文件:City.rar
链接: https://pan.baidu.com/s/1L70ahH9iBjdydfLHGkLLEw 提取码: pmmd
这次用DBLookupCombobox实现省份-城市-地区的下拉联动,用以学习DBLookupCombobox的一些用法
效果图:

首先建立数据表(数据表形式可以多种多样:数据库表、文本、xml等,最终能转换成Dataset数据集就好,这里使用数据库表)
1.省份表

2.城市表

3.地区表

时间关系,就简单做了几个数据,只有广东-广州-地区是完整的数据
建表及数据代码:
建表及数据SQL
窗体大概放这些控件,都是Delphi自带的。(如果安装了Ehlib包,用DBLookupComboboxEh效果更佳)

DBLookupCombobox的属性设置及说明

ListSource:下拉列表的数据集
ListField:下拉列表要显示的字段的名称
KeyField:要获得的字段值。例如广东对应的记录,1002,广东省。如果广东省被选择了,那么DBLookupCombobox.KeyValue的值就取字段name为广东的那条记录的code值(1002)
初始化数据集
procedure TForm2.FormCreate(Sender: TObject);
begin
//初始化数据集信息
qryProvince.Close;
qryCity.Close;
qryDistrict.Close;
qryProvince.SQL.Text := 'select * from province';
qryCity.SQL.Text := 'select * from city';
qryDistrict.SQL.Text := 'select * from district';
qryProvince.Open;
qryCity.Open;
qryDistrict.Open;
//打开数据集
qryProvince.Open;
qryCity.Open;
qryDistrict.Open;
//初始化DBLookupcombobox
qryCity.Filtered := False;
qryCity.Filter := 'code='+QuotedStr('');
qryCity.Filtered := True;
qryDistrict.Filtered := False;
qryDistrict.Filter := 'code='+QuotedStr('');
qryDistrict.Filtered := True;
end;
当省份选择之后,触发DBLookupCombobox的CloseUp事件
procedure TForm2.cbProvinceCloseUp(Sender: TObject);
var
keycode: string;
begin
if cbProvince.Text=EmptyStr then
keycode := EmptyStr
else
keycode := cbProvince.KeyValue; //关键是keyvalue,keyvalue的值来自于keyField,可以在属性面板设置keyFiled
//使用filter过滤,只显示Province=keycode的数据集
qryCity.Filtered := False;
qryCity.Filter := 'Province='+QuotedStr(keycode);
qryCity.Filtered := True;
//清除城市下拉框已选的值
cbCity.KeyValue := '';
cbDistrict.KeyValue := '';
end;
当城市选择之后
procedure TForm2.cbCityCloseUp(Sender: TObject);
var
keycode: string;
begin
if cbCity.Text=EmptyStr then
keycode := EmptyStr
else
keycode := cbCity.KeyValue;
//使用filter过滤,只显示city=keycode的数据集
qryDistrict.Filtered := False;
qryDistrict.Filter := 'city='+QuotedStr(keycode);
qryDistrict.Filtered := True;
//由于有些城市的区域为空,所以要把DBLookupCombobox的enable设置FALSE,否则会报错
if qryDistrict.RecordCount=0 then
cbDistrict.Enabled := False
else
cbDistrict.Enabled := True;
//清除已选择的地区的值
cbDistrict.KeyValue := '';
end;

浙公网安备 33010602011771号