DBLookupCombobox实现下拉联动

这次用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‘1001‘, NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N‘c1002‘, N‘上海市‘, N‘1001‘, NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N‘c1003‘, N‘天津市‘, N‘1001‘, NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N‘c1004‘, N‘重庆市‘, N‘1001‘, NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N‘c1005‘, N‘广州市‘, N‘1002‘, NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N‘c1006‘, N‘深圳市‘, N‘1002‘, NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N‘c1007‘, N‘珠海市‘, N‘1002‘, NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N‘c1008‘, N‘南宁市‘, N‘1003‘, NULL)
GO
INSERT [dbo].[City] ([code], [name], [province], [other]) VALUES (N‘c1009‘, N‘玉林市‘, N‘1003‘, 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‘1001‘, N‘直辖市‘, NULL)
GO
INSERT [dbo].[province] ([code], [name], [other]) VALUES (N‘1002‘, N‘广东省‘, NULL)
GO
INSERT [dbo].[province] ([code], [name], [other]) VALUES (N‘1003‘, 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=0 then
    cbDistrict.Enabled := False
  else
    cbDistrict.Enabled := True;

  //清除已选择的地区的值
  cbDistrict.KeyValue := ‘‘;
end;

城市选择之后

原文地址:https://www.cnblogs.com/Kwong/p/9503315.html

时间: 2024-10-22 11:05:17

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

学习aiax(javascript)--省份-城市二级下拉联动(POST方式)

1.jsp代码 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"

Jquery实现下拉联动表单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head><title>年月日三下拉框联动</title>

layui下拉联动

layui下写入监听, searchPname 是第一个下拉框 searchParkingname 是第二个下拉框 form.on('select(searchPname)', function(data){ $.getJSON(apiCtxPath + "/comuser/vipuser/userVipByParkingarea?parkingsvrId="+data.value, function(data){ var optionstring = ""; co

jquery实现下拉联动

很多项目用到这个功能,虽然写了不下5次以上了,一直没做过记录,记录一下,下次直接拷贝了,免得还得要重复写浪费时间. 先上HTML代码: 1 品牌: 2 <select class="sa" id="zxpp" style="width: 120px"> 3 <option value="">--请选择--</option> 4 <option value="1"&g

(实用篇)jQuery+PHP+MySQL实现二级联动下拉菜单

二级联动下拉菜单选择应用在在很多地方,比如说省市下拉联动,商品大小类下拉选择联动.本文将通过实例讲解使用jQuery+PHP+MySQL来实现大小分类二级下拉联动效果. 先看下效果 大类:  前端技术   程序开发   数据库   小类: 实现的效果就是当选择大类时,小类下拉框里的选项内容也随着改变.实现原理:根据大类的值,通过jQuery把值传给后台PHP处理,PHP通过查询MySQl数据库,得到相应的小类,并返回JSON数据给前端处理. XHTML 首先我们要建立两个下拉选择框,第一个是大类

java 下拉多级联动 头像裁剪 调用摄像头 SpringMVC mybatis SSM

获取[下载地址]   QQ 313596790三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 调用摄像头拍照,自定义裁剪编辑头像 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:313596790freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里

Java 使用POI生成带联动下拉框的excel表格

java 小学生一枚 ,学习记录. import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.poi.hssf.usermodel

自建List&lt;&gt;绑定ComboBox下拉框实现省市联动

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace _04省市联动 { public partial cl