【自然框架】分享 n级联动下拉列表框

简介:   特点:1、 使用js方法,把需要的数据一次性写入到页面里,然后用js来实现联动的效果。2、 支持n级。3、 封装成了服务器控件,所以使用非常简单。4、 支持在回发的时候保持状态。5、 支持修改记录的时候设置默认选项。

 

 

特点:
1、 使用js方法,把需要的数据一次性写入到页面里,然后用js来实现联动的效果。
2、 支持n级。
3、 封装成了服务器控件,所以使用非常简单。
4、 支持在回发的时候保持状态。
5、 支持修改记录的时候设置默认选项。
6、 页面设置比较灵活。
7、 采用DataSet作为数据的容器。

 

缺点:
1、 由于是把需要的数据一次性写入页面交给客户端,所以在网速比较慢的时候,显示页面需要比较长的时间。

 

可以改进的地方:
1、 引入json,可以把需要的数据放到单独的js文件里面,这样可以减少带宽的压力。
2、 Ajax,按需所取。每次只加载需要的数据。


在线演示:
  使用省、市、区县的数据库进行演示。由于服务器的网速很慢,所以需要等待一下,等页面完全下载完毕之后,才可以使用,否则会出现js脚本错误。页面完全下载完毕之后就没有js脚本错误了。

 

在线演示:http://demo.naturefw.com/Nonline/other/default.aspx

 

1、 二级联动的演示
以省、市联动为例演示。提交表单后可以保持状态,可以设置选项。

在线演示直通:http://demo.naturefw.com/Nonline/other/UniteList02.aspx

 

  protected   void  Page_Load( object  sender, EventArgs e)
        {
            DataAccessLibrary dal 
=  DALFactory.CreateDAL();

            
string  sql  =   @" SELECT AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode LIKE '__0000') 
                            SELECT ParentID,AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode LIKE '____00') AND (AreaCode NOT LIKE '__0000') 
" ;

            DataSet ds 
=  dal.ExecuteFillDataSet(sql);
            
this .lst_Area.DataSource  =  ds;
            
this .lst_Area.DataBind();
            
        }

        
protected   void  btn_Save_Click( object  sender, EventArgs e)
        {
            
// 提交表单后,获取联动下拉列表框的选项值

            
// 获取ID
             string  itemID  =   this .lst_Area.SelectedValue;

            
this .txt_Value.Text  =  itemID;

            
// 获取text
             string  itemText  =   this .lst_Area.SelectedText;
            
this .txt_Value.Text  =  itemID;

        }

        
protected   void  btn_SetItemSelect_Click( object  sender, EventArgs e)
        {
            
// 设置下拉列表框的选项
             string  itemID  =   this .txt_SetID.TextTrimNone;
            
this .lst_Area.SetSelectedValue(itemID);

        }

 

 

 

2、 三级联动的演示
以省、市、区县联动为例演示。提交表单后可以保持状态,可以设置选项。

演示直通:http://demo.naturefw.com/Nonline/other/UniteList03.aspx

(服务器的网速有点慢,网页又有点大,所以需要一点时间下载。)

 

protected   void  Page_Load( object  sender, EventArgs e)
        {
            DataAccessLibrary dal 
=  DALFactory.CreateDAL();

            
string  sql  =   @" SELECT AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode LIKE '__0000') 
                            SELECT ParentID,AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode LIKE '____00') AND (AreaCode NOT LIKE '__0000') 
                            SELECT ParentID,AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode NOT LIKE '__0000') AND (AreaCode NOT LIKE '____00') 
" ;

            DataSet ds 
=  dal.ExecuteFillDataSet(sql);
            
this .lst_Area.DataSource  =  ds;
            
this .lst_Area.DataBind();

        }

 

 

与二级联动的代码相对比,只是SQL语句的地方不同,即多了一条SQL语句。其他的都是一样的。同理,如果是四级的,那么就在多一条SQL语句。

n级联动,那么就需要n条SQL语句。

 

 

3、 修改记录演示
一般在修改记录的时候,需要根据记录里的信息设置列表框的选项,这里演示了这种功能。

演示直通:http://demo.naturefw.com/Nonline/other/UniteListUpdate.aspx 

 

增加下面这样的代码即可。

  if  ( ! Page.IsPostBack)
            {
                
// 6,568,572 是“辽宁省,抚顺市,望花区”对于的ID
                
// 实际项目中,是从数据库里获取,然后设置,这里只是一个实例
                 this .lst_Area.SetSelectedValue( " 6,568,572 " ); 
            }

 

 

4、 页面修饰演示
您看了上面的演示,可呢会觉得几个下拉列表框挨在一起太难看了,这里演示如何来做修饰。这个可以在下拉列表框的前面,加上一些修饰。

演示直通:http://demo.naturefw.com/Nonline/other/UniteListHTML.aspx

 

  protected   virtual   void  SetHTML()
        {
            
// 一行里,下拉列表框前面加说明的方法
             string [] html  =   new   string [ 6 ];
            html[
0 =   " 省份: " ;
            html[
2 =   " 城市: " ;
            html[
4 =   " 区/县: " ;

            
this .lst_Area.ListHTML  =  html;
        }

 

 

5、 Table形式的表单
在表单里,如果是table形式的话,一行里只想显示一个列表框,那么要如何设置呢?

演示直通:http://demo.naturefw.com/Nonline/other/UniteListHTML_table.aspx

 

省份、城市、区县各占一行的形式。

 

  protected   override   void  SetHTML()
        {
            
// 多行表格的方法
             string [] html  =   new   string [ 6 ];
            html[
0 =   "" ;
            html[
1 =   " </td></tr> " ;
            html[
2 =   " <tr><td align=\"right\">城市:</td><td> " ;
            html[
3 =   " </td></tr> " ;
            html[
4 =   " <tr><td align=\"right\">区/县:</td><td> " ;

            
this .lst_Area.ListHTML  =  html;
        }

 

 

6、 Div形式的表单
在表单里,如果是div形式,一行里只想显示一个列表框,那么又要如何设置呢?
演示直通:http://demo.naturefw.com/Nonline/other/UniteListHTML_div.aspx 

 

 

省份、城市、区县各占一行的形式。

 

 

protected   override   void  SetHTML()
        {
            
// 多行表格的方法
             string [] html  =   new   string [ 6 ];
            html[
0 =   "" ;
            html[
1 =   " </div> " ;
            html[
2 =   " <div class=\"formLeft\">城市:</div><div class=\"formRight\"> " ;
            html[
3 =   " </div> " ;
            html[
4 =   " <div class=\"formLeft\">区/县:</div><div class=\"formRight\"> " ;

            
this .lst_Area.ListHTML  =  html;
        }

 

 

注意:

  由于控件自身并没有保存数据,所以每次访问的时候,都需要设置DataSource 属性,并且需要绑定(DataBind)。这一点和一般的服务器控件不一样。

  设置选项的时候,需要在 if (!Page.IsPostBack) 内设置,否则无法得到用户的选择。

 

源码下载:http://www.naturefw.com/down/List1.aspx 

 

 

相关文章
ArcMap矢量图层的零碎、空洞区域填补与独立区域剔除:消除面部件
本文介绍在ArcMap软件中,基于消除面部件(“Eliminate Polygon Part”)工具,对矢量面要素的零碎、空洞区域加以删除,同时将游离于要素主体之外的部分剔除的方法~
112258 1
ArcMap矢量图层的零碎、空洞区域填补与独立区域剔除:消除面部件
|
4月前
|
索引
消除游戏中图标下落的原理和实现
消除游戏中图标下落的原理和实现
17 1
|
4月前
|
前端开发 JavaScript
巧妙解决显示和隐藏的代码
css使用方法 1.用opacity:0和visibility: hidden; 2.配合hover 3.原先opacity(透明度为0)hover设置为1,即从隐藏到显示,visibility同
34 0
|
6月前
|
敏捷开发 前端开发 开发者
【RaETable】🚀🚀🚀告别Form,RaETable表格列宽度支持拖动调整了,附带原理说明
【RaETable】🚀🚀🚀告别Form,RaETable表格列宽度支持拖动调整了,附带原理说明
|
9月前
|
数据安全/隐私保护 iOS开发 芯片
将任意应用窗口置顶显示,这个工具太强了。
将任意应用窗口置顶显示,这个工具太强了。
|
前端开发
html+css鼠标经过的样式变化例题
当用户移动鼠标到指定的区域或内容时,会出现什么不一样的渲染效果呢?看这篇文章一起来了解吧!
110 0
 html+css鼠标经过的样式变化例题
关于 Qt图形视图框架自绘图元放到左边和上边之外,部分在内进行拉伸后,拉伸多余的区域无法碰撞 的解决方法
关于 Qt图形视图框架自绘图元放到左边和上边之外,部分在内进行拉伸后,拉伸多余的区域无法碰撞 的解决方法
关于 Qt图形视图框架自绘图元放到左边和上边之外,部分在内进行拉伸后,拉伸多余的区域无法碰撞 的解决方法
|
计算机视觉
Qt实用技巧:Qt设计器中QIcon的缩放(qss的放大和QIcon自动缩小(无法自动放大))
Qt实用技巧:Qt设计器中QIcon的缩放(qss的放大和QIcon自动缩小(无法自动放大))
Qt实用技巧:Qt设计器中QIcon的缩放(qss的放大和QIcon自动缩小(无法自动放大))
|
vr&ar 图形学
【Unity3D 灵巧小知识点】 ☀️ | 层级面板中的 ‘小手指‘ 作用: 在Scen中将该物体设置为不可选中状态
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
【Unity3D 灵巧小知识点】 ☀️ | 层级面板中的 ‘小手指‘ 作用: 在Scen中将该物体设置为不可选中状态
|
JavaScript 数据建模 数据格式
【自然框架】n级下拉列表框的原理
  其实原理也很简单,分成两个部分,一个是服务器端,一个是客户端。     首先要设置记录集,这里用DataSet来装载,二级联动,里面就要有两个DataTable;三级联动,里面就要有三个DataTable。
1171 0