EasyUI combox实现联动

多的时间将被用于combox联动效应。一个选择combox的值自己主动出这值有关相应的其他信息,例如省市联动。最近,我刚刚会见了班似要求,随着EasyUI  combobox 控制完成。假设ASP.NET 里面DropDownList的话,那就非常easy了,一个SelectIndexChange事件再加一个AutoPostBack即可了,以下就是我实现的功能,事实上非常easy,可是对于像我这样刚接触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文件中面依据前台的请求,分别作出对应的处理。比方前台请求查询工厂,那后台就运行查询工厂的方法。其他的也是一样:

using System;
using System.Collections.Generic;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Test
{
    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["Oper"] != null)
            {
                string _FactoryID;
                string _WorkCenterID;

                //依据前台的请求进行分别处理。

switch (Request.QueryString["Oper"])
                {
                        //初始化的时候载入全部的工厂。
                    case "GetAllFactory":
                        GetAllFactory();
                        break;
                    case "GetWorkCenterListByFactoryID":
                        //前台发出请求的时候会传递一个工厂ID的參数进来。这里接收到这个參数,
                        //作为条件进行查询该工厂以下的工作中心。
                        _FactoryID = Request.QueryString["FactoryID"];
                        GetWorkCenterByFactoryID(_FactoryID);
                        break;
                    case "GetLineListByWorkCenterID":
                        //同上
                        _WorkCenterID = Request.QueryString["WorkCenterID"];
                        GetLineByWorkCenterID(_WorkCenterID);
                        break;
                }
            }
        }

        //*******************************************
        //以下部分的函数都是将DataTable类型的结果转换为JSON格式
        //*******************************************

        /// <summary>
        /// Get all factory
        /// </summary>
        /// <returns></returns>
        public void GetAllFactory()
        {
            var dt =new DAL().GetAllFactoryList();
            var json = JsonHelper.ConvertDataTable(dt);
            Response.Write(json);
            Response.End();
        }

        /// <summary>
        /// Get all workcenter by factory id
        /// </summary>
        /// <param name="FactoryID">Factory ID</param>
        /// <returns></returns>
        public void GetWorkCenterByFactoryID(string FactoryID)
        {
            var dt = new DAL().GetWorkCenterListByFactoryID(FactoryID);
            var json = JsonHelper.ConvertDataTable(dt);
            Response.Write(json);
            Response.End();
        }

        /// <summary>
        /// Get all lines by workcenter id
        /// </summary>
        /// <param name="WorkCenterID">Workcenter ID</param>
        /// <returns></returns>
        public void GetLineByWorkCenterID(string WorkCenterID)
        {
            var dt = new DAL().GetLineListByWorkCenterID(WorkCenterID);
            var json = JsonHelper.ConvertDataTable(dt);
            Response.Write(json);
            Response.End();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Web;
using System.Data;
namespace Test
{
    public class DAL
    {
        /// <summary>
        /// Get all factory
        /// </summary>
        /// <returns></returns>
        public DataTable GetAllFactoryList()
        {
            string strSql = "SELECT FactoryID,FactoryName FROM dbo.tb_Factory (NOLOCK) ORDER BY 2 ";
            return new DataAccess().GetDataTable(strSql);
        }

        /// <summary>
        /// Get all workcenter by factory id
        /// </summary>
        /// <param name="FactoryID">Factory ID</param>
        /// <returns></returns>
        public DataTable GetWorkCenterListByFactoryID(string FactoryID)
        {
            string strSql = "SELECT WorkCenterID,WorkCenterName FROM tb_WorkCenter (NOLOCK) WHERE FactoryID='" + FactoryID + "' ORDER BY WorkCenterName";
            return new DataAccess().GetDataTable(strSql);
        }

        /// <summary>
        /// Get all lines by workcenter id
        /// </summary>
        /// <param name="WorkCenterID">Workcenter ID</param>
        /// <returns></returns>
        public DataTable GetLineListByWorkCenterID(string WorkCenterID)
        {
            string strSql = " SELECT LineID,LineName FROM tb_Lines (NOLOCK) WHERE WorkCenterID='" + WorkCenterID + "' ORDER BY LineName";
            return new DataAccess().GetDataTable(strSql);
        }
    }
}

最后看一下效果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnBlbmcwMTE4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-10-05 05:43:06

EasyUI combox实现联动的相关文章

vs2013+MVC3.0+EasyUI的ComboBox联动使用(二)

?? vs2013+MVC3.0+EasyUI的ComboBox联动使用(二) 简单介绍:在vs2013(.net4.0)中使用MVC3.0对于EasyUI中ComboBox的联动使用. 载入ComboBox数据,而且实现联动效果, 本文将採用EasyUI中的Date控件与ComboBox实现联动效果,如图: ----------------------------------------------------------------------------------------------

jquery select下拉框和 easy-ui combox 选定指定项区别

jquey select <select id="gender" name="sex11" >//不能加easy-ui标记 <option value="男">男</option> <option value="女">女</option> </select> $('input[name=性别]').val(data.性别);//通过name属性选取 $('

easyUI combox静态动态联动

easyUI重写了select,取而代之的是combobox,有如下几种方式可以创建一个combobox 1.使用select标签,并加上class="easyui-combobox",这种方式比较适用于静态的选项 2.使用input标签,并加上class="easyui-combobox",后面跟上data-options,可以用local或是remote方式动态加载数据 3.使用js方式,和2基本相同,只是把combobox一些属性的设置分离到了js中 今天我就

电商商家后台-easyUI的combox三级联动

这几天在做项目中又用到了easyUI,以前做ITOO的时候前端都是被封装好的,而且也没有真正接触过三级联动效果.这个三级联动是要实现的是省市县联动.选择某一个省时跟着相应的市显示,接着相应的县显示. 不仅是这样,因为做的是修改功能,所以不仅要把查出来的省,市,县显示出来,而且从数据库中查询来的地区需要成为默认显示值.也就是说从数据库中查出来的地区跟查出来的所有省市区做对比,是数据库中地区显示为默认.举个例子,数据库中存的是河北省廊坊市燕郊区,那么显示在界面上的默认值也必须是河北省廊坊市燕郊区.这

easyUI下拉列表三级联动

首先是先想好数据库的搭建,通过地区id,地区名称,上级地区id就可以实现,所有省市区的数据 例如: DAO层 service层 Servlet 页面 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>修改员工</title> <!-- 顺序不可以乱 --> <!-- 1.jQuery的js包 --> <script

EasyUi Combox 多选 以及可能出现的问题 no result find for action Xxxx and result input 的说明

EasyUi Combobox 多选 以及可能出现的问题 no result find for action Xxxx  and result input 的解决方法 我个人遇到问题的时候,是这么个场景: 原有需求是做个下拉选择某个属性的相应值,只支持单选即可.此时的下拉值对应的是一个关联表的ID号,后台用int类型接收. 新需求里边提出了,这个下拉需要做成多选的,因为EasyUi的combobox有multiple属性(是否可多选),故继续使用combobox来做. 那么问题来了,给combo

easyui combox 随便不存在的值,清空

1 onHidePanel: function () { 2 var valueField = $(this).combobox("options").valueField; 3 var val = $(this).combobox("getValue"); 4 var allData = $(this).combobox("getData"); 5 var result = true; 6 for (var i = 0; i < allD

基于MVC+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动

为了提高客户体验和进行一些技术探索,现在正准备把我自己的客户关系管理系统CRM在做一个Web的版本,因此对基于MVC的Web界面继续进行一些研究和优化,力求在功能和界面上保持和Winform一致,本文主要介绍在我的CRM系统中用到的全国省份.城市.行政区三者的两种效果,在Winform上实现没问题,在Web上基于MVC的EasyUI实现,同样也没有问题. 1.Winform上省份.城市.行政区的联动效果 在很早的时候,我在Winform框架的一篇随笔<Winform开发框架之字典管理模块的更新,

DataGirdView绑定多列combox联动

/两个combox多行联动 private ComboBox cb1 = new ComboBox(); private ComboBox cb2 = new ComboBox(); //设置combox高度,解决默认修改combox.Height属性不能改变高度的问题 [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern int SendMessage(IntPtr hWnd, i