【Asp.Net使用EasyUI】EasyUI combox实现联动

很多时候都会用到combox的联动效果,选择上一个combox的值就自动带出这个值对应的其它信息,比如省市联动,最近我也刚好遇到了类似的要求,是用EasyUI  combobox 控件完成的,如果是ASP.NET 里面的DropDownList的话,那就很简单了,一个SelectIndexChange事件再加一个AutoPostBack就行了,下面就是我实现的功能,其实很简单,但是对于像我这样刚接触EasyUI,并且对JQ不熟悉的人来说还是有点费神。

首先是数据库:为此我特地做了一个测试数据库用来测试效果。

tb_Factory表为最上层
tb_Factory表中的FactoryID与tb_WorkCenter表中的FactoryID为主外键关系
tb_WorkCenter表中的WorkCenterID与tb_Lines表中的WorkCenterID为主外键关系

下面是前台页面代码,引用那些JQ的就不写了:

<body>
    <form id="form1" runat="server">
    <div>
        <div id="divcenter" style="width: 400px; height: 500px; position: absolute">
            <div id="divQuery" class="easyui-panel" title="查询">
                <table style="border: 0; width: 100%">
                    <tr style="height: 30px;">
                        <td style="text-align: right;" class="style2" align="right">
                            工厂:
                        </td>
                        <td style="text-align: left;" class="style1">
                            <select id="SelectF" class="easyui-combobox" data-options="valueField:'FactoryID',textField:'FactoryName',url:'Index.aspx?Oper=GetAllFactory',width:200,modal:true">
                            </select>
                        </td>
                    </tr>
                    <tr style="height: 30px;">
                        <td style="text-align: right;" class="style2" align="right">
                            工作中心:
                        </td>
                        <td style="text-align: left;" class="style1">
                            <select id="SelectW" class="easyui-combobox" data-options="valueField:'WorkCenterID',textField:'WorkCenterName',width:200">
                            </select>
                        </td>
                    </tr>
                    <tr style="height: 30px;">
                        <td style="text-align: right;" class="style2" align="right">
                            线别:
                        </td>
                        <td style="text-align: left;" class="style1">
                            <select id="SelectL" class="easyui-combobox" data-options="valueField:'LineID',textField:'LineName',width:200">
                            </select>
                        </td>
                    </tr>
                    <tr style="height: 30px;">
                        <td style="text-align: right;" class="style2" align="right">
                            日期:
                        </td>
                        <td style="text-align: left; font-weight: bold; padding-left: 10px;" class="style1">
                            <input id="StartDate_WorkGroup" type="text" style="width: 90px;" class="easyui-datebox" />至
                            <input id="EndDate_WorkGroup" type="text" style="width: 90px;" class="easyui-datebox" />
                        </td>
                    </tr>
                </table>
            </div>
        </div>
    </div>
    </form>
</body>

以下是脚本代码,通过JQ来实现combox的onSelect事件,重新创建新的URL,通过这个URL来使目标combox重新加载数据,在API上看到的方法:reload。

 <script language="javascript" type="text/javascript">

        $(document).ready(function () {

            //Start:居中显示
            $("#divcenter").css("left", (($(document).width()) / 2 - (parseInt($("#divcenter").width()) / 2)) + "px");
            $("#divcenter").css("top", (($(document).height()) / 2 - (parseInt($("#divcenter").height()) / 2)) + "px");
            //End:居中显示

            //Start:设置combox的选择事件
            $('#SelectF').combobox({
                onSelect: function () {
                    var url = 'Index.aspx?Oper=GetWorkCenterListByFactoryID&FactoryID=' + $('#SelectF').combobox('getValue');
                    $('#SelectW').combobox('reload', url);
                }
            });

            $('#SelectW').combobox({
                onSelect: function () {
                    var url = 'Index.aspx?Oper=GetLineListByWorkCenterID&WorkCenterID=' + $('#SelectW').combobox('getValue');
                    $('#SelectL').combobox('reload', url);
                }
            });
            //End:设置combox的选择事件

        });

            </script>

下面在cs文件里面根据前台的请求,分别作出相应的处理,比如前台请求查询工厂,那后台就执行查询工厂的方法,其它的也是一样:

 1 using System;
 2 using System.Collections.Generic;
 3
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7
 8 namespace Test
 9 {
10     public partial class Index : System.Web.UI.Page
11     {
12         protected void Page_Load(object sender, EventArgs e)
13         {
14             if (Request.QueryString["Oper"] != null)
15             {
16                 string _FactoryID;
17                 string _WorkCenterID;
18
19                 //根据前台的请求进行分别处理。
20                 switch (Request.QueryString["Oper"])
21                 {
22                         //初始化的时候加载所有的工厂。
23                     case "GetAllFactory":
24                         GetAllFactory();
25                         break;
26                     case "GetWorkCenterListByFactoryID":
27                         //前台发出请求的时候会传递一个工厂ID的参数进来,这里接收到这个参数,
28                         //作为条件进行查询该工厂下面的工作中心。
29                         _FactoryID = Request.QueryString["FactoryID"];
30                         GetWorkCenterByFactoryID(_FactoryID);
31                         break;
32                     case "GetLineListByWorkCenterID":
33                         //同上
34                         _WorkCenterID = Request.QueryString["WorkCenterID"];
35                         GetLineByWorkCenterID(_WorkCenterID);
36                         break;
37                 }
38             }
39         }
40
41         //*******************************************
42         //以下部分的函数都是将DataTable类型的结果转换为JSON格式
43         //*******************************************
44
45         /// <summary>
46         /// Get all factory
47         /// </summary>
48         /// <returns></returns>
49         public void GetAllFactory()
50         {
51             var dt =new DAL().GetAllFactoryList();
52             var json = JsonHelper.ConvertDataTable(dt);
53             Response.Write(json);
54             Response.End();
55         }
56
57         /// <summary>
58         /// Get all workcenter by factory id
59         /// </summary>
60         /// <param name="FactoryID">Factory ID</param>
61         /// <returns></returns>
62         public void GetWorkCenterByFactoryID(string FactoryID)
63         {
64             var dt = new DAL().GetWorkCenterListByFactoryID(FactoryID);
65             var json = JsonHelper.ConvertDataTable(dt);
66             Response.Write(json);
67             Response.End();
68         }
69
70         /// <summary>
71         /// Get all lines by workcenter id
72         /// </summary>
73         /// <param name="WorkCenterID">Workcenter ID</param>
74         /// <returns></returns>
75         public void GetLineByWorkCenterID(string WorkCenterID)
76         {
77             var dt = new DAL().GetLineListByWorkCenterID(WorkCenterID);
78             var json = JsonHelper.ConvertDataTable(dt);
79             Response.Write(json);
80             Response.End();
81         }
82     }
83 }
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Web;
 4 using System.Data;
 5 namespace Test
 6 {
 7     public class DAL
 8     {
 9         /// <summary>
10         /// Get all factory
11         /// </summary>
12         /// <returns></returns>
13         public DataTable GetAllFactoryList()
14         {
15             string strSql = "SELECT FactoryID,FactoryName FROM dbo.tb_Factory (NOLOCK) ORDER BY 2 ";
16             return new DataAccess().GetDataTable(strSql);
17         }
18
19         /// <summary>
20         /// Get all workcenter by factory id
21         /// </summary>
22         /// <param name="FactoryID">Factory ID</param>
23         /// <returns></returns>
24         public DataTable GetWorkCenterListByFactoryID(string FactoryID)
25         {
26             string strSql = "SELECT WorkCenterID,WorkCenterName FROM tb_WorkCenter (NOLOCK) WHERE FactoryID='" + FactoryID + "' ORDER BY WorkCenterName";
27             return new DataAccess().GetDataTable(strSql);
28         }
29
30         /// <summary>
31         /// Get all lines by workcenter id
32         /// </summary>
33         /// <param name="WorkCenterID">Workcenter ID</param>
34         /// <returns></returns>
35         public DataTable GetLineListByWorkCenterID(string WorkCenterID)
36         {
37             string strSql = " SELECT LineID,LineName FROM tb_Lines (NOLOCK) WHERE WorkCenterID='" + WorkCenterID + "' ORDER BY LineName";
38             return new DataAccess().GetDataTable(strSql);
39         }
40     }
41 }

最后看一下效果:

 

PS:

要注意一点:我总是不习惯JQ的那些写法,比如说每次开始和结尾的两个括号,要是跟C#里面一样就好了,上下各一个对齐,感觉JQ里面的括号特别"不好看",括号多了就容易看错,我在这个问题上犯了好几次错误了.

例子源码

时间: 2024-08-03 14:09:05

【Asp.Net使用EasyUI】EasyUI combox实现联动的相关文章

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(22)-权限管理系统-模块导航制作

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(22)-权限管理系统-模块导航制作 最近比较忙,系统难度独步增加,文章的发布速度明显比以前慢了. 由于我们已经跑通了整个系统,所有东西都回到了简单,接下来我们做模块制作也就是操作SysModule表. 首先我们来回顾一下之前的难点主要就是SysRight这个表Rightflag字段的改变,这个字段关系导航与角色组的关系显示(即有权限时候显示菜单导航,这个更新讲到授权讲到,在这里浮头一下) 所以我们操作S

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(13)

系统日志和异常的处理③ 上一节我们讲了如何捕获异常和记录日志,这一节我们讲,没有捕获的或者忘记捕获的异常包括404错误等,我们统一处理这个异常. 这一讲是利用 Application_Error 捕获所有异常,全局的异常处理为了减少代码,统一异常处理,Application_Error位于Global.asax里面, protected void Application_Error(object sender, EventArgs e) 当一个异常在调用堆栈中没有被处理,也没有被框架代码处理时,

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(9)

MVC与EasyUI结合增删改查 在第八讲中,我们已经做到了怎么样分页.这一讲主要讲增删改查.第六讲的代码已经给出,里面包含了增删改,大家可以下载下来看下.这讲主要是,制作漂亮的工具栏,虽然easyui的datagrid已经自带可以设置工具栏,我们还是要提取出来,为以后权限控制做更好的准备. 前端代码没有逻辑结果,这也许是我写代码以来写得最轻松的,但也是最繁琐的,因为美工我不是强项,每一次调整都非常的困难,最后我把他调成了这样了: 看得过去的鼓掌一下.样式已经包含在附加代码中了. 大家只要加入以

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码 上一讲我们创建了一系列的解决方案,我们通过一个例子来看看层与层之间的关系. 我们把Controllers分离出来了BLL层和DAL层 BLL专注于业务上的处理 DAL专注于数据访问层的处理 而Controller跟清楚的与View交互 我们上一讲已经在EF添加了一个实体SysSample 下面我们创建IDAL,DAL,IBLL,BLL的代码吧 using App.Mod

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(2)-easyui构建前端页面框架[附源码]

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(2)-easyui构建前端页面框架[附源码] 开始,我们有了一系列的解决方案,我们将动手搭建新系统吧. 用户的体验已经需要越来越注重,这次我们是左右分栏,左边是系统菜单,右边是一个以tabs页组成的页面集合,每一个tab都可以单独刷新和关闭,因为他们会是一个iframe 工欲善其事必先利其器.需要用到以下工具. Visual Studio 2012 您可以安装MVC4 for vs2010用VS2010

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(3)-漂亮系统登陆界面

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(3)-漂亮系统登陆界面 良好的登录页面是系统的唯一入口,良心说,我是很难做出漂亮的登录界面,所以有点违背本文的标题,因为我不是一个美工.汗..! 第二讲我已经发布了源码,我们添加一个Account空控制器,虽然后台未实现,但是以后我们就要用到了. 添加index视图,以下代码 @{ Layout = null; } <!DOCTYPE html> <html> <head> &

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(16)-权限管理系统-漂亮的验证码

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(16)-权限管理系统-漂亮的验证码   我们上一节建了数据库的表,但我发现很多东西还未完善起来,比如验证码,我们先做好验证码吧,验证码我们再熟悉不过了,为了防止恶意的登录,我们必须在登录页面加入验证码,下面我将分享一个验证码,这个是用C#画的,原理是,生成一个随机4位数,将其保存为session或者是cookie形式,将用户输入的验证码进行对比, 验证码可以是一个视图cshtml,或者是一个aspx页面

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(14)-系统小结

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(14)-系统小结 不知不觉已经过了13讲,(本来还要讲多一讲是,数据验证之自定义验证,基于园友还是对权限这块比较敢兴趣,讲不讲验证还是看大家的反映),我们应该对系统有一个小结.首先这是一个团队开发项目,基于接口编程,我们从EasyUI搭建系统的框架开始,开始了一个样例程序对EasyUI的DataGrid进行了操作,并实现Unity的注入到容器,使程序 的性能大大提升,代码质量上升,更佳利于单元测试,使用

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(28)-系统小结

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(28)-系统小结 我们从第一节搭建框架开始直到二十七节,权限管理已经告一段落,相信很多有跟上来的园友,已经搭配完成了,并能从模块创建授权分配和开发功能了 我没有发布所有源代码,但在14节发布了最后的一次源代码,之后的文章代码是完整的. 注:以后不会发布打包的源代码,我发布文章是献给想学习MVC的朋友,并不是共享结果的源代码,请大家不要再找我要 我们采用VS2012+MVC4+EF5+Unity(IOC)