首先,这次用到的知识点有三层的逻辑还有连接数据库知识以及传参知识点,废话不多说,首先展示页面:

首先第一本机的数据库,连接字符创写在app.cofing里,这个不用多说了:

<configuration><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup><connectionStrings><add name="constr" connectionString="Data Source=.;Initial Catalog=LiuHui;uid=sa;password=sybase;"/></connectionStrings>
</configuration>

  

然后是页面布局,上面也看到了,这里我用十个下拉框是因为后面传值需要用到,以现在的知识实在想不出什么高招了,只能用笨办法了,

接着我们写dal层代码,public static string ConStr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;这一句应该是取我们app.cofing里的连接字符串

 public DataTable SelectSanLinkane(string SanLinkane){string str = "Data Source =.;initial catalog=LiuHui;uid=sa;password=sybase";SqlConnection con = new SqlConnection(str);string sql = "select * from SanLiname";SqlDataAdapter da = new SqlDataAdapter(sql, con);DataSet ds = new DataSet();try{da.Fill(ds, "SanLiname");}catch (Exception ex){throw new Exception(ex.Message);}return ds.Tables["SanLiname"];}

  

这个方法是把数据库中的数据加载到内存表中,这样的好处就是数据库断开连接的时候照样不影响客户端的操作。

public List<SanLinameClass> ComBox(){List<SanLinameClass> list = new List<SanLinameClass>();using (SqlConnection con = new SqlConnection(ConStr)){try{string sql = "select * from SanLiname where ParentID = 0";SqlCommand cmd = new SqlCommand(sql, con);con.Open();SqlDataReader dr = cmd.ExecuteReader();while (dr.Read()){SanLinameClass SL = new SanLinameClass();SL.ID = Convert.ToInt32(dr["ID"]);SL.Name = dr["Name"].ToString();list.Add(SL);}}catch (Exception ex){throw new Exception(ex.Message);}}return list;}

  

这个方法就是过滤我们取到的值,然后得到我们想要的值,这里我们只要中国的根节点

public List<SanLinameClass> ComBox1(string s){List<SanLinameClass> list1 = new List<SanLinameClass>();using (SqlConnection con = new SqlConnection(ConStr)){try{string sql = "select * from SanLiname where ParentID = ";string sql1 = sql + s;SqlCommand cmd = new SqlCommand(sql1, con);con.Open();SqlDataReader dr = cmd.ExecuteReader(); ;while (dr.Read()){SanLinameClass sl = new SanLinameClass();sl.ID = Convert.ToInt32(dr["ID"]);sl.Name = dr["Name"].ToString();list1.Add(sl);}}catch (Exception ex){throw new Exception(ex.Message);}}return list1;}

  

这个和上面一样,不同之处是多了一个参数,这个参数用于传值用,这里要注意的是 List<SanLinameClass> list1 = new List<SanLinameClass>();必须放在方法里面,这是我做的时候遇到的一些问题,如果不放在方法里面,我们的combox每运行一次,就重新添加一遍数据。然后你想做几层就写几个方法,你也可以进行封装。

接着是我们的BLL层;

SanLinkameDal SLDal = new SanLinkameDal();//0是国家、1是省份、2是市区、3是县、4是乡镇。public DataTable selectSanLinkane(string SanLinkane){return SLDal.SelectSanLinkane(SanLinkane);}public List<SanLinameClass> ComBox(){ //国家return SLDal.ComBox();}public List<SanLinameClass> ComBox1(string s){//省份return SLDal.ComBox1(s);}public List<SanLinameClass> ComBox2(string ss){//市区return SLDal.ComBox2(ss);}public List<SanLinameClass> ComBox3(string sss){//县return SLDal.ComBox3(sss);}public List<SanLinameClass> ComBox4(string ssss){ //乡镇return SLDal.ComBox4(ssss);}

  

这是BLL层的所有代码,

再然后是UI层代码,我用的事件驱动是comboxclick事件,也就是单击事件,首先根节点的数据读取是加载页面的时候就开始加载数据

private void Form1_Load(object sender, EventArgs e){try{List<SanLinameClass> list = SLda.ComBox();list.Insert(0, new SanLinameClass() { ID = -1, Name = "--全部--" });comboBox1.DataSource = list;comboBox6.DataSource = list;comboBox1.ValueMember = "ID";comboBox1.DisplayMember = "Name";comboBox6.ValueMember = "ID";chuanzhi = Convert.ToString(comboBox1.SelectedIndex + 1);label6.Text = chuanzhi;}catch (Exception ex){MessageBox.Show(ex.Message);}}

  

其中 comboBox1.DataSource = list;是把数据源添加到控件中,然后 comboBox1.ValueMember = "ID";是获取相应Name的ID值,这是关键,因为我们需要ID值来对数据进行查询           comboBox1.DisplayMember = "Name";获取Name值,这里我是使用了两个combox控件,然后chuanzhi = Convert.ToString(comboBox1.SelectedIndex + 1);这是为了对应数据库中ID的值

public void ComBox1(){if (comboBox6.Text != ""){chuanzhi = comboBox6.Text;List<SanLinameClass> list2 = SLda.ComBox2(chuanzhi);comboBox2.DataSource = list2;comboBox7.DataSource = list2;comboBox2.ValueMember = "ID";comboBox2.DisplayMember = "Name";comboBox7.ValueMember = "ID";chuanzhi = Convert.ToString(comboBox2.SelectedIndex + 3);}}

  

定义了一个方法,这是第一个combox的点击事件要执行的方法,逻辑就是点击第一个combox,第二个combox获取数据,这样达到联动效果 。其中chuanzhi = Convert.ToString(comboBox2.SelectedIndex + 3);为什么加3,是因为我的数据库数据的原因。

好了,这次的联动下拉框的代码和思路就是这样差不多了。

如果有感兴趣的小伙伴也想做一个,但是又碰到难题,欢迎随时交流,QQ:511582456

感悟:强者的道路也是由这微小的知识铺就的,不放弃每一份汗水,只有坚持,才能走出自己的道路,我在路上

转载于:https://www.cnblogs.com/liuhuimh/p/7054518.html

联动下拉框显示省市县相关推荐

  1. java省市县联动 下拉框选择_原生JavaScript实现动态省市县三级联动下拉框菜单实例代码...

    像平时购物选择地址时一样,通过选择的省动态加载城市列表,通过选择的城市动态加载县区列表,从而可以实现省市县的三级联动,下面使用原生的JavaScript来实现这个功能: 先给大家展示下测试结果: 未做 ...

  2. android加载时二级联动点击二级联动,Android实现联动下拉框二级地市联动下拉框功能...

    日常使用软件中,为了方便且规范输入,会使用到下拉框进行输入,如注册时生日选项,购物时的地址输入,都会用到下拉框,今日笔者为了巩固已学的知识,实现了二级联动下拉框用作回顾及分享给求知的新手. 思路/步骤 ...

  3. Android实现联动下拉框

    Android实现联动下拉框,二级地市联动下拉框 日常使用软件中,为了方便且规范输入,会使用到下拉框进行输入,如注册时生日选项,购物时的地址输入,都会用到下拉框,今日笔者为了巩固已学的知识,实现了二级 ...

  4. Excel制作导入模板,多级联动下拉框(一整列的设置),修改一级下拉框内容,自动清空二级内容

    目录 效果展示 一.数据准备 二.模板制作 原因1:为空 原因二:名称管理器数据有误 三.修改一级下拉框内容,自动清空二级内容 1,效果演示 2,实际操作 效果展示 一.数据准备 1,新建一张表,在s ...

  5. Ajax实现无刷新三联动下拉框

    1.html代码 <HTML>     <HEAD>         <title>Ajax实现无刷新三联动下拉框</title>         &l ...

  6. 一个大数据量表访问优化--联动下拉框查询优化

    问题描述有一数据表(产品标签表,每个产品一个唯一的SN,每月100万左右),查询界面上有2个联动下拉框,[规格]____,[批次]______ 用户选择一个规格后(目前200来个规格),列出该规格下达 ...

  7. php下拉列表框 是隐藏变色的代码,jQuery设置下拉框显示与隐藏效果的方法分析...

    本文实例讲述了jQuery设置下拉框显示与隐藏效果的方法.分享给大家供大家参考,具体如下: jQuery的 hide() 和 show() 方法分别用来隐藏和显示 HTML 元素,而 toggle() ...

  8. extjs combobox下拉框显示位置问题

    问题描述:(下拉框显示的不在combobox的下端) 问题代码: { //baseCls:"x-plain",//强制与颜色 匹配 layout:"form", ...

  9. 2018最新版省市区三级联动下拉框+所有源代码以及数据库

    2018年国家统计局最新数据,JSP+Servlet+Dao实现省市区三级联动下拉框的效果 DropdownDAO.java -–Dao层 package com;import java.sql.Co ...

最新文章

  1. Nodejs教程30(完结):PM2入门
  2. 【ASP.NET 问题】Win7中IIS被防火墙阻止导致外网无法访问的解决方法。
  3. linux中如何查找文件中内容
  4. 拷贝 ioutils linux,使用Apache的IOUtils实现文件下载
  5. path:path在路由中的使用
  6. 腾讯35k招.NET Core开发,深扒这些技术要求 真的很难吗?
  7. 聚合登录平台网站源码
  8. 关于 Hibernate 中的“脏数据”、“脏对象”
  9. 简易JTAG烧写程序的执行逻辑和流程
  10. threeJs 入门
  11. 【CF-Round-458:D】Bash and a Tough Math Puzzle(判断是否可以通过修改区间内的一个数使区间gcd=x)
  12. Docker学习(四)Docker镜像原理 镜像commit操作补充
  13. oracle jde优势介绍,Oracle_JDE_EnterpriseOne模块的详细功能介绍
  14. PCkit3.5烧写器直接上手使用方法
  15. linux中oracle中文乱码问题
  16. 小米笔记本备份、SSD分区、U盘Ghost详解及对产品的建议
  17. android 焦点获取问题(手机端和TV端)
  18. 云林深处,一场灵魂的宿醉
  19. leetcode之随心刷
  20. GraphX入门简介

热门文章

  1. JBookManager v1.00.2008314 (编辑管理您的Jar电子书)
  2. ArcMap下栅格图象矢量化步骤:
  3. 雷林鹏分享:PHP If...Else 语句
  4. Windows Networking 4: CloudMonitor 引发的网络问题排查一则
  5. UVA 11992 - Fast Matrix Operations(段树)
  6. 获得1.5亿区块链投资后,矩阵元怎么做区块链?
  7. 干货首发,能够清理,带动画的自己定义控件CuteEditText
  8. tomcat之 JDK8.0安装、tomcat-8.5.15安装
  9. 查询一个ID出现2种结果的情况
  10. hdu 4055 hdu 4489 动态规划