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

首先第一本机的数据库,连接字符创写在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. 自定义Adapter中实现startActivityForResult的分析
  2. JavaWeb应用开发环境-Tomcat服务器
  3. Mysql5.X重点难点速记
  4. 前端开发 标签的属性和值 0228 需演练
  5. 拥有2000家门店,他如何晋升为服装界的新宠? 1
  6. Atitit sql的执行功能 目录 1. 主要流程 1 1.1. 获取conn,执行sql取得结果, 1 1.2. Orm类的执行(hb mybatis为例 1 2. 常见sql执行框架与类库 1
  7. C语言 Linux版俄罗斯方块,C语言版俄罗斯方块源代码
  8. spoon mysql教程_kettle 教程(一):简介及入门
  9. java毕业设计高校多媒体设备报修管理系统源码+系统+数据库+lw文档+调试运行
  10. 在线对数函数计算机,计算器在线计算
  11. ES6入门:模板字符串
  12. 为了你的账户安全,此WeChat ID 不能登入Wechat网页版。你可以.......
  13. 浅谈一类积性函数的前缀和
  14. 组卷与考试系统_题库添加选择题模块
  15. 多项式(带余)除法学习笔记
  16. 【备忘录】西北工业大学 深澜校园网登录页面
  17. modbus slave和modbus poll
  18. 网络营销推广怎么做 微信如何吸引粉丝
  19. “正交阵”与“特征值和特征向量”
  20. 三星Q90 全景声回音壁 参数发布

热门文章

  1. Jmeter 抓app包 抓到一半不好用了
  2. linux自学笔记--vim和文本三剑客基础
  3. Tkinter编写Mac应用(-)
  4. iOS 怎么设置 UITabBarController 的第n个item为第一响应者?
  5. 开发过程中的注意事项,想到哪写到哪
  6. POJ2586(贪心)
  7. VMAXe资源配置只用4分钟
  8. iOS App后台保活
  9. Java1.7ConcurrentHashMap类源码解析
  10. python权限不够cmd安装不了_python环境配置+matplotlib