这次用DBLookupCombobox实现省份-城市-地区的下拉联动,用以学习DBLookupCombobox的一些用法

效果图:

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

1.省份表

2.城市表

3.地区表

时间关系,就简单做了几个数据,只有广东-广州-地区是完整的数据

建表及数据代码:

USE [his_mz]
GO
/****** Object: Table [dbo].[City] Script Date: 2018-8-19 23:04:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[City](
[code] [varchar](10) NOT NULL,
[name] [varchar](50) NOT NULL,
[province] [varchar](10) NOT NULL,
[other] [varchar](50) NULL,
CONSTRAINT [PK_City] PRIMARY KEY CLUSTERED
(
[code] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[district] Script Date: 2018-8-19 23:04:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[district](
[code] [varchar](10) NOT NULL,
[name] [varchar](50) NOT NULL,
[city] [varchar](10) NOT NULL,
[other] [varchar](50) NULL
) ON [PRIMARY] GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[province] Script Date: 2018-8-19 23:04:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[province](
[code] [varchar](10) NOT NULL,
[name] [varchar](50) NOT NULL,
[other] [varchar](50) NULL
) ON [PRIMARY] GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N'c1001', N'北京市', N'', NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N'c1002', N'上海市', N'', NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N'c1003', N'天津市', N'', NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N'c1004', N'重庆市', N'', NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N'c1005', N'广州市', N'', NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N'c1006', N'深圳市', N'', NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N'c1007', N'珠海市', N'', NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N'c1008', N'南宁市', N'', NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N'c1009', N'玉林市', N'', NULL)
GO
INSERT [dbo].[district] ([code], [name], [city], [other]) VALUES (N'd1001', N'越秀区', N'c1005', NULL)
GO
INSERT [dbo].[district] ([code], [name], [city], [other]) VALUES (N'd1002', N'荔湾区', N'c1005', NULL)
GO
INSERT [dbo].[district] ([code], [name], [city], [other]) VALUES (N'd1003', N'天河区', N'c1005', NULL)
GO
INSERT [dbo].[district] ([code], [name], [city], [other]) VALUES (N'd1004', N'海珠区', N'c1005', NULL)
GO
INSERT [dbo].[district] ([code], [name], [city], [other]) VALUES (N'd1005', N'黄浦区', N'c1005', NULL)
GO
INSERT [dbo].[district] ([code], [name], [city], [other]) VALUES (N'd1006', N'萝岗区', N'c1005', NULL)
GO
INSERT [dbo].[district] ([code], [name], [city], [other]) VALUES (N'd1007', N'芳村区', N'c1005', NULL)
GO
INSERT [dbo].[district] ([code], [name], [city], [other]) VALUES (N'd1008', N'白云区', N'c1005', NULL)
GO
INSERT [dbo].[district] ([code], [name], [city], [other]) VALUES (N'd1009', N'花都区', N'c1005', NULL)
GO
INSERT [dbo].[district] ([code], [name], [city], [other]) VALUES (N'd1010', N'增城区', N'c1005', NULL)
GO
INSERT [dbo].[district] ([code], [name], [city], [other]) VALUES (N'd1011', N'从化区', N'c1005', NULL)
GO
INSERT [dbo].[province] ([code], [name], [other]) VALUES (N'', N'直辖市', NULL)
GO
INSERT [dbo].[province] ([code], [name], [other]) VALUES (N'', N'广东省', NULL)
GO
INSERT [dbo].[province] ([code], [name], [other]) VALUES (N'', N'广西壮族自治区', NULL)
GO

建表及数据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= then
cbDistrict.Enabled := False
else
cbDistrict.Enabled := True; //清除已选择的地区的值
cbDistrict.KeyValue := '';
end;

城市选择之后

DBLookupCombobox实现下拉联动的更多相关文章

  1. Jquery Json 下拉联动

    #region dataTable转换成Json格式 /// <summary> /// dataTable转换成Json格式 /// </summary> /// <p ...

  2. AJAX二级下拉联动【XML方式】

    AJAX二级下拉联动案例 我们在购物的时候,常常需要我们来选择自己的收货地址,先选择省份,再选择城市- 有没有发现:当我们选择完省份的时候,出现的城市全部都是根据省份来给我们选择的.这是怎么做到的呢? ...

  3. 用NPOI导出Excel,生成下拉列表、以及下拉联动列表(第1篇/共3篇)

    最近帅帅的小毛驴遇到一个很奇葩的需求: 导出Excel报表,而且还要带下拉框,更奇葩的是,下拉框还是联动的. 小毛驴一天比较忙,所以这等小事自然由我来为她分忧了.经历了两天,做了几种解决方案,最后完美 ...

  4. 菜鸟学Java(七)——Ajax+Servlet实现无刷新下拉联动

    下拉联动的功能可以说非常的常用,例如在选择省.市等信息的时候:或者在选择大类.小类的时候.总之,下拉联动很常用.今天就跟大家分享一个简单的二级下拉联动的功能. 大类下拉框:页面加载的时候就初始化大类的 ...

  5. Ajax案例-基于XML,以POST方式,完成省份-城市二级下拉联动

    <%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC & ...

  6. Jquery实现下拉联动表单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. html年月日下拉联动菜单 年月日三下拉框联动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. AJAX多级下拉联动【JSON】

    前言 前面我们已经使用过了XML作为数据载体在AJAX中与服务器进行交互.当时候我们的案例是二级联动,使用Servlet进行控制 这次我们使用JSON作为数据载体在AJAX与服务器交互,使用三级联动, ...

  9. jquery实现下拉联动

    很多项目用到这个功能,虽然写了不下5次以上了,一直没做过记录,记录一下,下次直接拷贝了,免得还得要重复写浪费时间. 先上HTML代码: 品牌: <select class="sa&qu ...

随机推荐

  1. 按下回车默认提交form表单问题

    最近开发中碰到一个问题,项目中有几个列表展示页面,允许用户通过查询条件模糊查询数据.用户录入关键字后点击回车会调用查询方法根据关键字查询,原先功能没有问题,但是最近发现在查询输入框中按下回车会直接刷新 ...

  2. 论文笔记【四】Semi-supervised Word Sense Disambiguation with Neural Models

    基于神经模型的半监督词义消歧 Dayu Yuan  Julian Richardson  Ryan Doherty  Colin Evans  Eric Altendorf Google, Mount ...

  3. 2019/4/16 wen 反射与JVM

  4. FL studio里的项目设置介绍

    FL studio作为具有众多音乐功能,能够制作多轨音频录制,排序和混音的一款专业软件,我们可以借助VST主机,灵活的调音台,高级MIDI和ReWire支持,来创建专业品质的各种音乐曲目. 而今天我们 ...

  5. android开发_Eclipse新建项目+新建模拟器

    一.新建项目 1 Eclipse->右键->new->Android Application Project,得到下图: 2 输入创建项目信息 3 点击next 4 点击 next ...

  6. selenium 文件上传

    一般分两个场景:一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决: 另外一种非input标签实现起来比较困难,可以借助autoit工具或者SendKeys第三方 ...

  7. P4717 【模板】快速沃尔什变换

    思路 FWT的模板 FWT解决这样的卷积 \[ C_k=\sum_{i\otimes j=k} A_iB_j \] \(\otimes\)可能是and,or,xor等位运算 几个式子 FWTand: ...

  8. matlab从曲线图提取数据

    同学用肉体一顿饭让我帮他做下这个DDL 样图是一张非常扭曲的三虚线图他甚至想OCR识别x轴y轴坐标单位 上谷歌查了查,对于曲线图提取数据基本上是手动在曲线上取几个点,然后由这个几个点开始遍历领域点,判 ...

  9. C语言-第6次作业

    1.本章学习总结 1.1思维导图 1.2 本章学习体会 学习感受:先是接触到网络工程导论的建立文件的方式,觉得很方便很好用,而后直接从代码的层面建立文件,觉得很新奇,更加方便,随着大作业的一步一步升级 ...

  10. 一梦江湖费六年——QQ群聊天分析

    本文结构: 一.那些年我们加过的QQ群 二.数据读入和整理(一)--来自蓝翔的挖掘机 二.数据读入和整理(二)--你不知道的事 三.聊天宏观(1)--寤寐思服 三.聊天宏观(2)日月篇 三.聊天宏观( ...