级联下拉列表
excel制作2级联动下拉菜单
数据录入的时候,经常需要用到两级下拉菜单,并且需要联动,输入完第一级内容之后,第二级的内容是对应的
效果如下所示:
制作过程也非常简单,只需要几步就可以完成
1、准备数据源
第一行中的数据,输入一级下拉菜单中的内容
从第二行开始,依次向下输入一级菜单对应的二级菜单的内容
2、使用名称管理器创建字段
我们选中所有的数据区域
按CTRL+G,调出定位条件
然后在定位条件里面,选择常量
然后,我们选择公式选项卡
点击根据所选内容创建,只勾选首行,然后点击确定
通过这一步操作,其实我们就是将第一行的数据做为字段,将下面的数据作为引用的区域,创建了名称组
3、制作下拉菜单
我们选中第一列A列,然后点击数据,点击数据验证
选择序列
数据来源,我们选择,之前的第一行的数据,也就是表1的A1:E1的数据
这样就制作好了一级下拉菜单
然后选中B列,同样的使用数据验证,但是数据来源,我们输入的是公式:=INDIRECT(A1)
也就是间接引用A列对应的值
所以当我们A2输入的内容是浙江的时候,B2引用的就是浙江这个数据组,因为我们第2步创建了名称管理器,指定了浙江数据组是下面的数据,所以二级下拉菜单就会对应显示
4、开放数据源
如果我们有需求,但左边的数据新增的时候,二级联动下拉菜单能自动的更新数据,不需要重新再次设置
那就需要做个简单的设置
依次选中每列的数据源区域,然后依次按CTRL+T,将它转成智能表格
然后当我们在下方新增数据的时候,下拉菜单就可以自动的扩充数据了。
三级级联下拉菜单的实现流程
三级级联下拉菜单的实现流程1.首先,我们需要在页面上创建三个下拉菜单元素。
First, we need to create three drop-down menu elements on the page.2.然后,我们要填充第一个下拉菜单,以显示第一级的选项。
Then, we will populate the first drop-down menu to display the options for the first level.3.接着,我们需要为第一个下拉菜单添加一个事件监听器,以便在选择其中一个选项时触发下一个菜单的更新。
Next, we need to add an event listener to the first drop-down menu, so that selecting an option triggers an update to the next menu.4.然后,我们将填充第二个下拉菜单,以显示第二级的选项。
Then, we will populate the second drop-down menu to display the options for the second level.5.接下来,我们需要为第二个下拉菜单添加事件监听器,以便在选择其中一个选项时触发第三个菜单的更新。
After that, we need to add an event listener to thesecond drop-down menu, so that selecting an option triggersan update to the third menu.6.然后,我们将填充第三个下拉菜单,以显示第三级的选项。
Next, we will populate the third drop-down menu todisplay the options for the third level.7.最后,当用户选择完最后一级的选项后,我们可以获取所选择的值并进行相应的处理。
VUE三级联动的下拉框
VUE三级联动的下拉框1. ⾸先关于后台的代码,三级联动和⼆级联动没有区别也是通过字典字段的查询实现联动//三级联动下拉框public List<City> GetCid(int pid){return db.City.Where(m => m.ParentId == pid).ToList();}2. 前台的代码还是⽐较⿇烦的,要写三个⽅法<tr><td>籍贯</td><td colspan="3">省<select v-model="formData.ProvinceId" v-on:change="getCity"><option v-for="item in provinceItem" :value="item.CId">{{ame}}</option></select>-市<select v-model="formData.CityId" v-on:change="getCounty"><option v-for="item in cityItem" :value="item.CId">{{ame}}</option></select>-县<select v-model="formData.CountyId"><option v-for="item in countyItem" :value="item.CId">{{ame}}</option></select></td></tr><script>let app = new Vue({el: "#app",data() {return {formData: {ENumber: "",EName: "",ESex: "",DId: "0",EJob: "",EPhone: "",EMail: "",ProvinceId: "0",CityId: "0",CountyId: "0",Birthday: "",Remark: ""},provinceItem: [],//省cityItem: [],//市countyItem:[]//县}},methods: {//省getProvince() {axios.get('/CRM/GetCid?pid=0').then(res => {this.provinceItem = res.data;this.provinceItem.unshift({ "CId": "0", "CName": "请选择" })})},//市getCity() {this.cityItem = [];this.countyItem = [];axios.get('/CRM/GetCid?pid=' + this.formData.ProvinceId).then(res => {this.cityItem = res.data;this.cityItem.unshift({ "CId": "0", "CName": "请选择" });this.formData.CityId = this.cityItem[0].CId;})},//县getCounty() {this.countyItem = [];axios.get('/CRM/GetCid?pid=' + this.formData.CityId).then(res => {this.countyItem = res.data;this.countyItem.unshift({ "CId": "0", "CName": "请选择" });this.formData.CountyId = this.countyItem[0].CId;})}},created: function () {this.getDept();this.getProvince(); }})</script>以上就是VUE三级联动。
级联菜单、分类下拉列表填充
步骤一:输入如下数据,一列为一类,首行为分类名称
省广东湖南广西广州市江门市长沙市株洲市南宁市广东广州市长沙市南宁市天河区新会区芙蓉区天元区江南区湖南江门市株洲市柳州市白云区蓬江区天心区芦淞区青秀区广西越秀区
番禺区
荔湾区
步骤二:如下所示,选中黄色区域,然后执行“数据”->“有效性”,如右图设置
省
广东
步骤三:选中蓝色区域,执行“插入”->“名称”->“指定”,如右图
步骤四:选中绿色区域,执行“数据”->“有效性”,如右图
省市
广东江门市
广东广州市
湖南长沙市
步骤五同步骤四
省市区
广东广州市天河区
湖南长沙市芙蓉区
广西南宁市江南区
小结:用excel做级联菜单,或者说分类填充,
主要使用到的操作是“数据”->“有效性”和“插入”->“名称”->“指定”,我们需要针对
柳州市城中区柳北区
指定”,我们需要针对实际情况灵活使用。
级联下拉框制作终极教程
级联下拉框制作终极教程1.先插入一个表单,在表单中插入两个下拉框。
<form id="form1" name="userinfo" method="post" action="">所在城市:<select name="szSheng" onchange="chsel()"><option value="XXX" selected="selected">请选择省份……</option></select><select name="szShi"></select></form>2.访问数据库中的省表,将省表中的省表名和省id填充到第一个(省)下拉列表框中去。
<%set rs_s=server.createobject("adodb.recordset")sql="select * from province order by shengorder"rs_s.open sql,conn,1,1while not rs_s.eof%><option value="<%=rs_s("ShengNo")%>" ><%=trim(rs_s("ShengName"))%> </option> <%rs_s.movenextwendrs_s.closeset rs_s=nothing%>3.用JavaScript建立一个数组,将市表中所有的市填充到该数组中。
<script language="JavaScript" type="text/javascript"><%dim sql,i,jset rs_s=server.createobject("adodb.recordset")sql="select * from province order by shengorder"rs_s.open sql,conn,1,1%>var selects=[];selects['xxx']=new Array(new Option('请选择城市……','xxx'));<%for i=1 to rs_s.recordcount%>selects['<%=rs_s("ShengNo")%>']=new Array(<%set rs_s1=server.createobject("adodb.recordset")sql="select * from city where shengid="&rs_s("id")&" order by shiorder"rs_s1.open sql,conn,1,1if rs_s1.recordcount>0 thenfor j=1 to rs_s1.recordcountif j=rs_s1.recordcount then%>new Option('<%=trim(rs_s1("shiname"))%>','<%=trim(rs_s1("shiNo"))%>')); <%else%>new Option('<%=trim(rs_s1("shiname"))%>','<%=trim(rs_s1("shiNo"))%>'), <%end ifrs_s1.movenextnextelse%>new Option('','0'));<%end ifrs_s1.closeset rs_s1=nothingrs_s.movenextnextrs_s.closeset rs_s=nothing%></script>这样,自动生成的selects数组中的各个元素如下:var selects=[];selects['xxx']=new Array(new Option('请选择城市……','xxx'));selects['4']=new Array(new Option('上海市','1'));selects['1']=new Array(new Option('合肥市','1'),new Option('芜湖市','2'),new Option('安庆市','3'),new Option('巢湖市','4'),new Option('淮南市','6'),new Option('马鞍山市','7'),new Option('宿州市','8'),new Option('宣州市','9'),new Option('蚌埠市','10'),new Option('池州地区','11'),new Option('阜阳市','12'),new Option('淮北市','13'),new Option('黄山市','14'),new Option('六安市','15'),new Option('铜陵市','16'),new Option('亳州市','17')); selects['2']=new Array(new Option('济南市','1'),new Option('东营市','2'),new Option('滨州地区','3'),new Option('淄博市','4'),new Option('德州市','5'),new Option('济宁市','6'),new Option('聊城地区','7'),new Option('临沂市','8'),new Option('青岛市','10'),new Option('日照市','11'),new Option('威海市','12'),new Option('泰安市','13'),new Option('潍坊市','14'),new Option('烟台市','15'),new Option('菏泽地区','16'),new Option('枣庄市','171')); selects['3']=new Array(new Option('南京市','1'),new Option('淮阴市','2'),new Option('常州市','3'),new Option('连云港市','4'),new Option('南通市','5'),new Option('徐州市','6'),new Option('苏州市','7'),new Option('无锡市','8'),new Option('盐城市','9'),new Option('扬州市','10'),new Option('镇江市','11'),new Option('泰州市','12'),selects['0']=new Array(new Option('北京市','1'));4.编写级联触发程序,在省的下拉框onchange事件中触发。
下拉列表高级用法
下拉列表高级用法下拉列表是网页开发中常用的交互元素之一,常用于提供选项供用户选择。
除了基本的下拉菜单功能,下拉列表还有一些高级用法,可以进一步优化用户体验和提升功能性。
1. 多级联动下拉列表:多级联动下拉列表可以实现在一个下拉列表的选择项改变时,动态更新其他相关的下拉列表的选项。
这种高级用法常用于地址选择、商品分类选择等场景。
例如,用户选择了某个省份,在第二个下拉列表中只显示该省份下的城市选项,从而缩小了用户的选择范围,提高了选择的准确性和效率。
2. 远程数据加载:下拉列表的选项通常是静态的,但有时我们需要从服务器动态加载选项数据。
远程数据加载可以通过AJAX等技术实现。
例如,在一个下拉列表中,用户输入关键词,通过与服务器的交互,获取与关键词匹配的选项列表,并动态展示给用户选择。
3. 模糊匹配搜索:在大量可选项存在的情况下,模糊匹配搜索可以帮助用户快速定位所需的选项。
用户在下拉列表中输入关键词时,下拉列表会根据用户输入的内容筛选出匹配的选项并展示,从而缩小了用户的选择范围。
这种高级用法常用于城市选择、商品搜索等场景。
4. 带图标的下拉列表:为了增加选项的可视化效果和美观度,可以在下拉列表中添加图标。
例如,在一个选择国家的下拉列表中,每个选项前面可以加入该国家的国旗图标,从而使得选择更加直观和易于理解。
5. 虚拟滚动:当下拉列表中的选项较多时,可能会导致页面卡顿和加载时间过长的问题。
虚拟滚动是一种解决方案,它只渲染用户正在可视区域内的选项,而不渲染所有的选项。
当用户滚动下拉列表时,会动态加载新的选项。
虚拟滚动技术有效解决了大数据量下拉列表的性能问题。
以上是下拉列表的一些高级用法,它们可以提升用户体验、提高功能的灵活性和可扩展性。
根据具体的应用场景,我们可以选择适合的高级用法来优化下拉列表的功能。
excel表格二级下拉框联动公式
Excel表格是一款常用的办公软件,它的功能强大,可以用来进行数据处理、数据分析、图表制作等。
在Excel中,使用下拉框可以使数据输入更加规范和便捷,而下拉框的联动功能则可以实现不同选项之间的关联,使数据选择更加精准和便利。
本文将结合实际操作,介绍如何在Excel表格中使用二级下拉框联动公式。
1. 准备数据在使用二级下拉框联动公式前,首先需要准备好数据。
假设我们有一个产品销售数据表,其中包括产品类别、产品名称和销售数量等信息。
我们需要在Excel表格中设置两个下拉框,第一个下拉框用于选择产品类别,第二个下拉框则根据所选的产品类别,显示对应的产品名称。
我们需要准备好产品类别和产品名称的数据列表。
2. 创建下拉框在Excel表格中,创建下拉框可以通过数据验证功能实现。
首先在表格中选择需要设置下拉框的单元格,然后依次点击“数据”→“数据验证”→“设置”中的“允许”选择“列表”,在“来源”中输入产品类别的数据列表,点击“确定”即可创建产品类别的下拉框。
同样的方法,可以创建产品名称的下拉框,并在“来源”中使用间接函数来实现二级下拉框的联动效果。
3. 使用间接函数在Excel中,可以使用间接函数实现二级下拉框的联动效果。
间接函数的语法为=INDIRECT(引用的单元格),它可以将单元格中的内容作为一个单元格引用,并返回该单元格的值。
在创建产品名称的下拉框时,我们可以在“来源”中使用间接函数,引用产品类别下拉框所在的单元格,如=INDIRECT(A2),其中A2为产品类别下拉框所在的单元格。
这样,当选择了不同的产品类别时,产品名称下拉框中显示的选项就会随之改变,实现了二级下拉框的联动效果。
4. 编写联动公式除了使用间接函数,我们还可以通过编写联动公式来实现二级下拉框的联动效果。
在产品名称的下拉框所在单元格中,我们可以编写一个IF函数来根据产品类别的选择,从不同的数据列表中获取产品名称,从而实现二级下拉框的联动效果。
powerbuilder级联下拉式数据窗口的实现方法
powerbuilder级联下拉式数据窗口的实现方法PowerBuilder是一款功能强大的开发工具,它可以帮助开发人员快速构建各种应用程序。
其中,级联下拉式数据窗口是PowerBuilder中非常重要的一个功能,它可以让用户在选择一个下拉列表中的选项后,自动更新另一个下拉列表中的选项。
下面将介绍PowerBuilder级联下拉式数据窗口的实现方法。
一、创建数据窗口首先,我们需要创建一个数据窗口,用于显示级联下拉列表的数据。
在数据窗口中,我们需要添加两个下拉列表框,一个用于显示第一级数据,另一个用于显示第二级数据。
在下拉列表框的属性中,我们需要设置数据源和显示字段。
二、设置级联关系接下来,我们需要设置两个下拉列表框之间的级联关系。
在第一个下拉列表框的Clicked事件中,我们需要添加以下代码:dw_1.SetTransObject(SQLCA)dw_1.Retrieve()其中,dw_1是我们创建的数据窗口的名称,SQLCA是PowerBuilder 中的一个全局变量,用于执行数据库操作。
这段代码的作用是在第一个下拉列表框中选择一个选项后,自动更新第二个下拉列表框中的选项。
三、设置过滤条件最后,我们需要设置第二个下拉列表框的过滤条件,以便只显示与第一个下拉列表框中选择的选项相关的数据。
在第二个下拉列表框的Clicked事件中,我们需要添加以下代码:dw_2.SetTransObject(SQLCA)dw_2.SetFilter("field_name = '" +dw_1.GetItemString(dw_1.GetRow(), "field_name") + "'")dw_2.Retrieve()其中,dw_2是我们创建的数据窗口的名称,field_name是我们在数据窗口中设置的字段名称。
这段代码的作用是根据第一个下拉列表框中选择的选项,设置第二个下拉列表框的过滤条件,并更新第二个下拉列表框中的数据。
级联下拉框
级联下拉框级联下拉框在输入一些多级项目时,如果输入前一级内容时,能够自动出现次一级内容,就会减少出错的机会并提高工作效率。
例如我们常用的费用科目有“管理费用”、“经营费用”、“财务费用”,这些属于一级科目,在它们的下面还有二级科目,比如“财务费用”的二级科目就包括“利息支出”、“手续费”等。
如果我们先输入“财务费用”后,希望有一个下拉框能列出只属于它的二级内容以供选择,就会方便很多,这就要用到“级联下拉框”了。
先在一个工作簿中做两个工作表,一个名为“列表”,另一个名为“明细单”。
(提示:这只是一个例子,工作表的名子可以自取,如果放到一个工作表中也可以的)下面要定义几个“名称”,以便在下拉框中调用。
先定义“一级科目”的名称,选中“列表”中的A1:A4区域,按工具栏上的“插入-名称-定义”.这时弹出一个对话框,如果与下图的设置一样,直接点“确定”按钮即可。
这样一级科目的名称就定义好了,以后只要引用这个名称,EXCEL就会返回实际的数据区域。
再根据一级科目中的项目,参照上面方法,分别定义它们的二级名称。
定义管理费用二级名称,选中列表的B2:F2区域,按“插入-名称-定义”定义经营费用二级名称,选中“列表”的B3:E3区域,按“插入-名称-定义”定义财务费用二级名称,选中“列表”的B4:C4区域,按“插入-名称-定义”这样所有名称都定义好了,下面就可以用“数据有效性”来添加下拉框了。
打开“明细单”工作表,选中B5:B7区域,按工具栏上的“数据-有效性”这时会弹出“数据有效性”对话框,在“设置”选项卡中按下图设置。
其中“来源”框中就是我们在上面定义的“一级科目”名称。
(注意:“来源”框中的等号一定要在英文状态下输入)点“确定”后,一级科目的有效性下拉框设置完毕,下面再设置二级科目的下拉框,也就是我们在文章开头说的“级联下拉框”。
步骤类似,选中“明细单”的C5:C7区域,按“数据-有效性”,并按下面图片设置。
级联下拉列表
1 添加dwr.jar (从DWR官方网站/dwr/download)2 在web.xml中添加如下代码<servlet><servlet-name>dwr-invoker</servlet-name><servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class><init-param><param-name>debug</param-name><param-value>true</param-value></init-param></servlet><servlet-mapping><servlet-name>dwr-invoker</servlet-name><url-pattern>/dwr/*</url-pattern></servlet-mapping>3 创建Java类及其方法如:// 级联public String findBySId(Long id) {// 查询属于此科目的所有知识点List<KnowledgepointInfo> list =knowledgepointInfoDAO.findBySubjectId(id);StringBuffer str = new StringBuffer();str.append("[");for (int i = 0; i < list.size(); i++) {str.append("{'subjectId':").append("'").append(list.get(i).getSub jectId()).append("',");str.append("'knowledgepointName':").append("'").append(list.get(i ).getKnowledgepointName()).append("'}");if (i < list.size() - 1) {str.append(",");}}str.append("]");System.out.println(str.toString());return str.toString();}4 在wen-inf文件夹下创建dwr.xml文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "/dwr/dwr20.dtd"><dwr><allow><create creator="new" javascript="scs"scope="application"><param name="class"value="service.StudentService" /></create></allow></dwr>注:此处需要修改的属性为:javascript 和value ,其中javascript的值表示该类对象在页面上使用时的js对象;value的值为完整的包名和类名5 编写页面代码:先添加3个js文件其中只有第一个的src需要改动格式为dwr/interface/scs.js 此处的scs 为dwr.xml中的javascript的值。
js面向对象封装级联下拉菜单列表
js⾯向对象封装级联下拉菜单列表本实例开发的级联下拉菜单是根据已有json数据创建的DOM元素。
点击⽂本框后,显⽰⼀级菜单。
如果菜单中包含⼦菜单,菜单右侧会有指⽰箭头。
点击菜单之后,会再显⽰下⼀级菜单,以此类推。
当菜单下⽆⼦菜单时,选择菜单后会在⽂本框中显⽰。
打开后的级联菜单效果如图所⽰:使⽤实例中封装好的插件,只需要有⼀个input元素,即可通过插件⾃动⽣成级联下拉菜单,html代码如下所⽰:<div style="margin-top:100px;text-align:center;"><input type="text" id="input"></div>接下来看下具体封装的js代码怎么实现。
1. 声明级联菜单的构造函数构造函数需要传⼊⼀个⽂本框元素和菜单关联数据两个参数。
//elem为⽂本框,data为菜单关联数据function CascadeMenu(elem,data){}2. 在构造函数中创建级联菜单相关元素,并放到页⾯中,具体代码如下:function CascadeMenu(elem,data){//获取⽂本框this.eInput = elem;//设置⽂本框为只读this.eInput.setAttribute('readonly',true);//设置⽂本框提⽰this.eInput.placeholder = '请选择';//获取⽂本框⽗元素var eInputParent = this.eInput.parentNode;//创建级联菜单容器this.eCascade = document.createElement('div');this.eCascade.className = 'cascade_container';//创建菜单下拉列表容器this.eCascadeInto = document.createElement('div');this.eCascadeInto.className = 'cascade_into';//下拉列表容器默认隐藏this.eCascadeInto.style.display = 'none';//将各个元素放到页⾯中this.eCascade.appendChild(this.eInput);this.eCascade.appendChild(this.eCascadeInto);eInputParent.appendChild(this.eCascade);//获取菜单数据this.aData = data;//记录已选择的菜单数据this.aSelected = [];//菜单打开状态,默认为false,表⽰隐藏this.bShow = false;}3. 在⽂本框上绑定点击事件,⽣成级联下拉菜单刚才已经把需要的元素都放到了页⾯中,现在可以通过点击⽂本框显⽰和隐藏级联菜单元素;在显⽰级联菜单元素时,应该要通过数据⽣成级联下拉菜单。
vue三级联动下拉列表原理
vue三级联动下拉列表原理
Vue三级联动下拉列表原理指的是在Vue框架下,实现三个下拉列表之间的联动关系的方法与原理。
三级联动下拉列表常常用于省市区、分类选择等场景中。
该原理的实现基于Vue组件化思想,将三个下拉列表组件化为三个子组件。
通过父组件向子组件传递props属性,实现子组件之间的通信与联动。
具体实现步骤如下:
1. 父组件中定义三个子组件,分别对应三个下拉列表。
2. 父组件中定义一个data对象,对应三个下拉列表选中的值。
3. 父组件向三个子组件分别传递一个props属性,对应该下拉列表的选中值。
4. 子组件中通过props属性接收父组件传递的选中值,并将其渲染到下拉列表中。
5. 子组件中通过watch属性监听选中值的变化,并触发一个自定义事件。
6. 父组件中通过v-on指令监听子组件触发的自定义事件,并在事件处理函数中更新选中值,并向子组件传递新的选中值。
7. 子组件中再次通过props属性接收新的选中值,并将其渲染到下拉列表中,完成联动效果。
总之,Vue三级联动下拉列表原理的核心在于组件之间的通信与联动,通过将子组件组件化,实现父子组件之间的数据传递与事件触
发,从而实现三级联动效果。
在Excel中实现多级下拉列表(关联)
在Excel中实现多级下拉列表(关联)在Excel中实现多级下拉列表(关联)我们在用Excel录入表格数据时,常常会遇到某列数据的值只在几个固定值中选择一个的情况,比如:人的性别列只可能录入男或女,对学历列只可能录入高中、大专、本科、研究生之一等。
遇到这类数据,如果我们手工录入,效率既低又容易出错,最好的解决办法是提供一个下拉列表框供我们选择其中的值。
下面就通过一个编排教师的课表为例教大家如何实现,该Excel表格能在填表时选择教师姓名,并能在另一列表中选择他所负责的课程名称。
一创建数据源表在sheet2表中输入教师姓名以及所负责的课程,把教师姓名横放在第2行。
选中B2:F2,即教师姓名。
然后在名称框为它输入一个名字“name”(图1),输入完成后一定要按回车,转到sheet1工作表。
二数据关联为了在sheet1表引用name名称,在教师姓名列下拉框选(B3:B9)单元格,点击菜单栏中的“数据→有效性”,在弹出的“数据有效性”对话框中选择“设置”选项卡,在“允许”选择框中选择“序列”,在来源输入框中输入“=name”(图2),点击“确定”后,在下拉列表中就可选择各个教师了。
提示:现在就可体会出名称框的妙用,因为来源的拾取按钮是不能跨表去拾取其他表的数据的。
第二步就是实现能够自动选择教师所负责的课程,由于教师姓名是变动的,要求负责的课程名称也要随之变动。
负责课程这一列中的有效性数据来自于教师姓名这一列,怎么解决这个问题?同样,我们可用名称框来解决。
回到sheet2表,用不着给表中的每个教师的课程单独取名,很麻烦也很耽误时间。
把整个区域选中(B2:F6),用每一列的第一行数据取名,点击“插入→名称→指定”,在指定名称对话框中只选中“首行”(图3),点击“确定”后就可在sheet1表中使用了。
转到sheet1表,把负责课程列下的区域选中(C3:C9),点击“数据→有效性→序列”。
接着就要注意来源输入框中的内容了,因为不能等于单元格,在这里希望引用教师姓名所对应的名称里的数据来做下拉列表,这里要用到函数indirect,它表示从某一单元格中取数据,然后把此数据转换成一个区域。
树型结构~无限级联下拉列表框
树型结构~⽆限级联下拉列表框这个问题困扰了我很久,今天终于把它解决了,⼼中的喜悦可想⽽知,赶快把它记录⼀下标题⽆限级联下拉列表框的含义:可能有⼀个树型结构的表,它可能有ID,Name,ParentID,Level等字段,下⾯要实现的就是从⼀级节点开始,⼀级⼀级的列出来,并以下拉列表框的形式体现出来,就像是N级联动。
效果图:两个问题:1 建⽴操作时的联动,它不需要进⾏⾃动绑定2 编辑操作时的联运,它需要根据⼦节点,逐级⾃⼰绑定到⽗节点,直到根实现:JS代码1 <script type="text/javascript">2function areaOnSelect(obj) {3var res = '';4 $.ajax({ url: '@Url.Action("GetSubTree")',5 type: 'GET',6 data: { parentId: obj.value },7 success: function (msg) {8 $(obj).nextAll().remove();9 res = "<select name='Sub' onchange='areaOnSelect(this)'>";10 res += "<option value=''>请选择</option>";11 $.each(msg, function (i, item) {12 res += "<option value='" + item["ID"] + "'>" + item["Name"] + "</option>";13 });14 res += "</select>";15if ($(res).find("option").size() > 1)16 $(obj).after(res);17 }18 });19 }20 </script>C#代码:1 #region 树型结构相关2/// <summary>3/// 递归找⽼祖宗4/// </summary>5/// <param name="father"></param>6void GetFather(SubItem father)7 {8if (father != null)9 {10 father.Parent = _subList.FirstOrDefault(i => i.ID == father.ParentID);11 GetFather(father.Parent);12 }13 }1415/// <summary>16/// 弟妹找⼦孙17/// </summary>18/// <param name="father">⽗对象</param>19void getSons(SubItem father)20 {21if (father != null)22 {23 father.Sons = _subList.Where(item =>24 item.ParentID.Equals(father.ID)).ToList();25 father.Sons.ForEach(item =>26 {27 item.Parent = father;28 getSons(item);29 });30 }31 }323334 #endregionC#拼接下拉列表框相关:1 /// <summary>2/// 递归得到它的所有祖宗以selectlist的形式进⾏拼接3/// </summary>4/// <param name="son"></param>5/// <param name="sbr"></param>6void getSelectList(SubItem son, StringBuilder sbr)7 {8 StringBuilder inSbr = new StringBuilder();9if (son != null)10 {11if (son.ParentID == 0)12 inSbr.Append("<select name='Parent' onchange = 'areaOnSelect(this)' >");13else14 inSbr.Append("<select name='Sub'>");15 GetCommon_CategoryByLevel(son.Level).ToList().ForEach(i =>16 {17if (i.ID == son.ID)18 inSbr.Append("<option value='" + i.ID + "' selected='true'>" + + "</option>");19else20 inSbr.Append("<option value='" + i.ID + "'>" + + "</option>");21 });2223 inSbr.Append("</select>");24 sbr.Insert(0, inSbr);25 getSelectList(son.Parent, sbr);26 }27 }C#得到同⼀深度的节点(同辈节点)相关:1 /// <summary>2/// 得到指定深度的列表3/// </summary>4/// <param name="level"></param>5/// <returns></returns>6 public List<SubItem> GetCommon_CategoryByLevel(int level)7 {8var linq = from data1 in _subList9 join data2 in _subList on data1.ParentID equals data2.ID into list10 select new SubItem11 {12 ID = data1.ID,13 Level = data1.Level,14 Name = ,15 Parent = list.FirstOrDefault(),16 ParentID = data1.ParentID,17 };18return linq.Where(i => i.Level.Equals(level)).ToList();19 }MVC页⾯action相关:1 public ActionResult Category(int? id)2 {3 ViewData["Parent"] = new SelectList(_subList.Where(i => i.ID == (id ?? 0)), "ID", "Name", id ?? 1);4 SubItem current = _subList.FirstOrDefault(i => i.ID == (id ?? 1));5 GetFather(current);6 StringBuilder sbr = new StringBuilder();7 getSelectList(current, sbr);8 ViewData["edit"] = sbr.ToString();//修改时,进⾏绑定9return View();10 }MVC页⾯代码相关:1 @Html.Raw(ViewData["edit"].ToString())C#树型结构实体类相关:1///<summary>2///树型分类结构3///</summary>4public class Category5 {6///<summary>7///⽗ID8///</summary>9public int ParentID { get; set; }10///<summary>11///树ID12///</summary>13public int ID { get; set; }14///<summary>15///树名称16///</summary>17public string Name { get; set; }18///<summary>19///深度20///</summary>21public int Level { get; set; }22///<summary>23///⼦孙节点24///</summary>25public List<Category> Sons { get; set; }26///<summary>27///⽗节点28///</summary>29public Category Parent { get; set; }30 }好了,现在我们的N级⽆限下拉列表框就做好了,呵呵!。
Excel技巧-二级联动下拉列表设置
创建二级联动下拉列表
【需求示例】:
如图1,左侧表格存储了4个省/直辖市与其下级区域的对应关系。
要求建在单元格G1、H1之间建立二级联动关系。
当在G1输入指定省份/直辖市时,H1单元格对应的可选下拉列表中只显示与之相对应的下级区域。
图1二级菜单需求示例
【实现步骤】:
Step1:选择所有省/直辖市与其下级区域所有数据
图2选择基础数据表
【说明】:
具体操作步骤为:
①选择完整数据区域:A1:D12;
②打开“定位”对话框(快捷键为F5);
③打开“定位条件”对话框,选择依据常量定位。
本步操作后的结果如图3:
图3基础数据选择结果
Step2:创建名称
图4定义名称
Step3:通过单元格H1的数据有效性设置,建立G1与H1内容的二级联动关系
图5创建二级联动关系
【说明】:
①图5采用的公式为:=INDIRECT(G2);
②设置完成后,当G2中输入了北京市,H2中下拉框只显示北京的下级区域:
图6效果示例。
excel应用场景:多级联动下拉列表实现选择一级部门下的二级部门
excel应用场景:多级联动下拉列表实现选择一级部门下的二级部门excel应用场景:多级联动下拉列表实现选择一级部门下的二级部门很多小伙伴们都知道,利用数据有效性功能做一个下拉列表,可以让用户从列表中选择选项,避免手工输入造成的错误。
但是你们知道如何做一个多级联动下拉列表吗?先让我介绍一下,什么叫多级联动下拉列表。
例如,公司里面的部门,分为一级部门,二级部门等。
要求用户在选择了一个一级部门后,在二级部门中,只能选择一级部门对应的那些二级部门。
最终效果我们就以上面这个例子开始,向小伙伴们,演示一下如何做这样一个多级联动下拉列表。
动画演示解析:首先,分别定义了[市场部]和[信息研发部]名称,来管理各自对应的二级部门。
然后,在数据有效性中,指定一级部门的数据序列来源于{B1:C1}最后,在数据有效性中,指定二级部门的数据序列来源于Indirect(D8),快速适用公式到其他二级部门单元格中。
这里只有一点要说明一下,那就是Indirect(D8)的作用。
Indirect(D8)的执行细节,如下图:Indirect函数解析附:Indirect(ref)函数的定义:返回文本字符串ref所指定的引用扩展:如果是三级联动,例如下图中的例子,怎么做呢?最终效果请看动画演示效果:动画效果三级部门联动原理和二级部门联动的例子是一样的。
最后总结一下,这一期的主要内容是联动下拉列表的实现,包括二级联动以及三级联动。
用到的主要功能点是:在名称管理器中创建名称来管理对应的单元格区域,以及通过Indirect函数去查找地址对应的实际引用(相当于二次查找)。
欢迎大家观看,转发,并留下宝贵意见,谢谢。
本文是[谈谈生活谈谈职场]的原创,如要转载,请联系作者。
关键词:Excel 联动下拉列表,Excel 联动下拉框,Indirect。
在excel表格里如何设置三级联动列表,学会这,多少级下拉列表都能轻松搞定
在excel表格里如何设置三级联动列表,学会这,多少级下拉列表都能轻松搞
定
在前面的章节里我们学习了如何设置一级下拉菜单和二级联动菜单,今天我们通过设置三级菜单来巩固复习如何设置多级联动菜单,不知道如何设置一级下拉菜单和二级联动菜单的,请翻阅前面的章节。
下图图示中已经设置好了一级和二级下拉列表。
在选项设置区域设置好三级下拉列表和二级选项的对应关系,横竖设置都行,但首行或首列必须是对应的二级列表。
选中表格里三级下拉选项,首行是二级下拉选项,点击菜单栏上“公式”,单击“根
据所选内容创建”,弹出窗口,勾选首行,即通过首行也就是二级列表创建对应的名称。
选中表格里的项目编号,打开数据验证窗口,在验证条件里设置允许序列,单击来源,输入“indirect($b4)”,即项目编号这一列的下拉选项来源是根据B列单元格的值在选项区域里引用。
点击确定,点击“项目编号”,下拉列出的选项是由二级下拉列表选出的数据决定,而二级下拉列表由一列下拉列表决定,这样就建立好了三级联动下拉列表。
以上,都理解了,四级、五级下拉列表也就轻轻松松能创建了。
有问题,欢迎留言讨论。
Bootstrap每天必学之级联下拉菜单
Bootstrap每天必学之级联下拉菜单本⽂将介绍⾃定义的bootstrap级联下拉菜单,主要应⽤场合有省市级关联菜单等等,那么就先拿这个例⼦来讲,当然其他场景的关联菜单也同样适⽤。
说实话,封装好⼀个通⽤的组件还是需要花费很多精⼒的和时间的,所谓通⽤,⾃然要考虑周全,叹!这次整理的Bootstrap关联select,⾥⾯也涉及到了很多jquery、ajax、springMVC等等知识点,可谓包罗万象!⾸先,请允许我代表该⾃定义组件做⼀番⼩⼩的介绍。
“hi,你好,我叫box.js,主⼈给我起的名字,其实呢,挺俗的。
我主要通过为select组件增加两个⾃定义属性来完成相应的数据加载,数据请求使⽤了ajax,后端数据处理使⽤了springMVC(当然其他⽅式也可以,只需要返回对应的json数据即可),使⽤起来呢,就⾮常⾮常简单了!”⼀、界⾯效果当然了,从界⾯上完全看不出来⼀个组件封装的好坏,但⾄少,你感觉很简洁漂亮,那么好了,有了这层印象,你是否有兴趣继续看下去?我想答案是肯定的。
⼆、使⽤⽅法①、procity.jsp⾸先呢,在页⾯上加载box.js(稍候介绍,⾄于其他的bootstrap的css和js,不在本章介绍范围内,略过),同时呢,创建两个select,具体格式见如下:<script type="text/javascript" src="${ctx}/components/yunm/box.js"></script><div class="form-group"><div class="row"><div class="col-md-6"><select name="province_code" class="form-control combox" ref="city_select"refUrl="${ctx}/procity?pro_code={value}&city_code=HSLY"></select></div><div class="col-md-6"><select name="city_code" id="city_select" class="form-control"></select></div></div></div><script type="text/javascript"><!--$(function() {if ($box) {$("box", $p).combox();}});//--></script>·两个select组件,⼀个为province_code、⼀个为city_code。
Excel下拉列表及级联的方法
在“以选定区域创建名称”对 话框中:选择“以下列选定区 域的值创建名称” (即第1级 列表的内容在选定区域中的 “行”或“列”)
2
第3页/共9页
Excel下拉列表及级联的方法
下拉列表的级联(方法:数据有效性)
在指定位置(例如:g3)设计第1级下拉列表:在 “数据有效性”对话框中,“设置”选项卡 → “有效性条件”“允许”选择“序列”→ 选择数据 “来源”(下拉列表内容所在区域:$k$3:$k$8)
在指定位置(例如:h3)设计第2级下拉列表:在 “数据有效性”对话框中,“设置”选项卡 → “有效性条件”“允许”选择“序列”→ 在“来源” 中输入“=INDIRECT( g3)”公式,公式中的参数是 第1级下拉列表所在的单元格的编号。
3
第4页/共9页
Excel下拉列表(补充)
下拉列表(方法2:窗体组合框)
“开发工具”选项卡 → “控件”组 → “插入” (打开“表单控件”工具箱)
在“表单控件”工具箱中:选择“组合框(窗体控 件)”→ 在所需位置画出组合框
右击组合框→ 选择“设置控件格式”(打开“设置 控件格式”对话框)
4
第5页/共9页
Excel下拉列表(补充)
下拉列表(方法2 :窗体组合框)
在“ActiveX控件”工具箱中:选择“组合框 (ActiveX控件)”→ 在所需位置画出组合框
右击组合框→ 选择“属性”(打开“属性”窗体) 注意:需要“设计模式”有效
6
第7页/共9页
Excel下拉列表(补充)
下拉列表(方法3 :ActiveX控件的组合框)
在“属性”窗体中:设置 “LinkedCell”(下拉列表所
动态级联下拉列表制作心得
动态级联下拉列表制作心得Excel的级联下拉列表的制作,相信大家都非常熟,如果数据不是太多的话,还是非常容易的。
我在学习制作下拉列表的时候,遇到一个比较麻烦的问题:中国政区级联下拉列表的制。
省一级34个,地市级三百多个,县市级有两千多个。
如果按照常规的办法,制作下来,还不累死?通过本人查资料,想办法通过制作动态级联下拉列表,简单方便。
现在把制作方法写在这里,与大家分享,希望高手能给予多多指教。
制作思路:通过vlookup函数,列出本级需要出现在出现在本级中的政区。
由于全国每个政区包含的下一级政区数量存在差异,直接引用的话,有时候会出现许多空格,不便于选择。
所以通过offset 函数创建一个公式,去除空白单元格。
制作过程:首先把数据整理成如下图的样子。
制作过程:第一级下拉列表:通过数据验证,数据来源直接引用“从华北到台港奥地区”那几个单元格,我用的是B5。
第二级下拉列表:找一个空列(我用的是“第I列”)首个(不一定是第一个,我用的是L2)单元格中输入:=IFERROR(VLOOKUP($B$5&(ROW(L2)-1),J:K,2,FALSE),""),含义是在J:K首列查找B5单元格连上行号减1并引用K列的数据,无数据的单元格为空。
然后向下填充七八个(包含最大区域省级单位数量就行),这样,随着我们在B5单元格中选择不同的区域,L2—L9中的数据也跟着变化。
创建公式:ss(省市):“=OFFSET(Sheet1!$L$2,,,SUMPRODUCT(N(LEN(Sheet1!$L:$L)> 0)),)”含义是引用L列从第2行开始的非空单元格。
在省级单元格中进行数据验证,数据来源中输入:“=ss”。
用同样的办法制作第三级也就是地市级、第四级也就是县市级下拉列表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 添加dwr.jar (从DWR官方网站/dwr/download)
2 在web.xml中添加如下代码
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
3 创建Java类及其方法如:
// 级联
public String findBySId(Long id) {
// 查询属于此科目的所有知识点
List<KnowledgepointInfo> list =
knowledgepointInfoDAO.findBySubjectId(id);
StringBuffer str = new StringBuffer();
str.append("[");
for (int i = 0; i < list.size(); i++) {
str.append("{'subjectId':").append("'").append(list.get(i).getSub jectId()).append("',");
str.append("'knowledgepointName':").append("'").append(list.get(i ).getKnowledgepointName()).append("'}");
if (i < list.size() - 1) {
str.append(",");
}
}
str.append("]");
System.out.println(str.toString());
return str.toString();
}
4 在wen-inf文件夹下创建dwr.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="scs"
scope="application">
<param name="class"
value="service.StudentService" />
</create>
</allow>
</dwr>
注:此处需要修改的属性为:javascript 和value ,其中javascript的值表示该类对象在页面上使用时的js对象;value的值为完整的包名和类名
5 编写页面代码:
先添加3个js文件其中只有第一个的src需要改动格式为dwr/interface/scs.js 此处的scs 为dwr.xml中的javascript的值。
<script type='text/javascript'
src='<%=path %>/dwr/interface/questionInfo.js'></script>
<script type='text/javascript'
src='<%=path %>/dwr/util.js'></script>
<script type='text/javascript'
src='<%=path %>/dwr/engine.js'></script>
<script type="text/javascript">
function aa(){
//调用服务器端Java类中方法,callBackHello为回调函数
var subId=document.getElementById("sname").value;
questionInfo.findBySId(subId,callBackHello);
}
//回调函数,data为执行方法的返回值其类型为xml和text json function callBackHello(data){
var secondLs = document.getElementById("kname");
secondLs.options.length=1;
var knamelist = eval("(" + data + ")");
for(var i=0;i<knamelist.length;i++){
secondLs.options.add(new
Option(knamelist[i].knowledgepointName,knamelist[i].subjectId));
}
secondLs.list=knamelist;
}
</script>
Boby中:
<tr>
<td width="106" height="25" align="right"
valign="middle"
bgcolor="#CCCCCC">
<p>
科目名称
</p>
</td>
<td width="484">
<select name="sname" id="sname" value="ajax" onchange="aa()">
<option>请选择</option>
<c:forEach items="${klist}"
var="subjectInfo">
<option
value="${subjectInfo.subjectId}">${subjectInfo.subjectName}</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td width="106" height="25" align="right"
valign="middle"
bgcolor="#CCCCCC">
<p>
知识点名称
</p>
</td>
<td width="484">
<select name="kname" id="kname">
<option>请选择</option>
</select>
</td>
</tr>。