easyui 实现的高级查询

本文介绍了一个使用 EasyUI Datagrid 插件的动态编辑功能的示例,展示了如何通过 JavaScript 实现数据网格的插入、删除和清空操作,并详细解释了字段、比较符和逻辑关系的格式化显示,以及根据字段类型动态创建值列的编辑器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


<table id="search">

</table>
<div id="tb">
    <a href="javascript:void(0)" onclick="add()"  class="easyui-linkbutton" iconCls="icon-add">插入条件</a>

    <a href="javascript:void(0)" onclick="del()"  class="easyui-linkbutton" iconCls="icon-del">删除条件</a>
    <a href="javascript:void(0)" onclick="delall()"  class="easyui-linkbutton" iconCls="icon-empty">清空条件</a>


</div>
<script>

    var field = {$data.field};
    var compare ={$data.compare};
    var relation={$data.relation};
    var data=[
    ];
    //格式化字段
    var _fieldnameFormater=function(value,row){
        var rets="";
        for (var i=0;i<field.length;i++){
            if (field[i].id===value){
                rets=field[i].text;
                break;
            }
        }
        return rets;
    };
    //格式化比较符显示
    var _compareFormater=function(value,row){
        var rets="";
        for (var i=0;i<compare.length;i++){
            if (compare[i].id===value){
                rets=compare[i].text;
                break;
            }
        }
        return rets;
    };
    //格式化逻辑关系
    var _relationFormater=function(value,row){
        var rets="";
        for (var i=0;i<relation.length;i++){
            if (relation[i].id===value){
                rets=relation[i].text;
                break;
            }
        }
        return rets;
    };

    //当字段combobox改变值时,动态创建值列的editor
    var _onChangeValueEditor=function(newValue, oldValue)
    {
        var editor=_getColumEditor(newValue);
        g.datagrid("removeEditor","value");
        g.datagrid("addEditor",[{field:'value',editor:editor}]);

    };
    //根据字段生成editor
    var _getColumEditor=function(fieldname){
        var type="string";
        for (var i=0;i<field.length;i++){
            if (field[i].id===fieldname){
                type=field[i].type;
                break;
            }
        }
        var retEditor={};
        switch (type)
        {
            case "int":retEditor={type:"numberspinner",options:{required:false}};break;
            case "bool":retEditor={type:"checkbox",options:{required:false}};break;
            case "date":retEditor={type:"datebox",options:{required:false}};break;
            default:retEditor={type:"textbox",options:{required:false}};
        }
        return retEditor;

    };

    _currentEditIndex=-1;
    window['g']=$('#search').datagrid({
        data:data,
        clickToEdit:true,
        method:'post',
        rownumbers: true,
        animate:true,
        collapsible: true,
        fitColumns: true,
        singleSelect:true,
        striped: true,
        remoteSort:true,
        fit:true,
        toolbar: '#tb',
        pagination:false,
        checkbox:false,
        columns:[[
            {field:'field',align:'center',title:'字段',width:200,editor:{type:'combobox',options:{data:field, valueField: 'id',textField: 'text',onChange:_onChangeValueEditor}},formatter:_fieldnameFormater},
            {field:'compare',align:'center',title:'比较符',width:220,editor:{type:'combobox',options:{data:compare, valueField: 'id',textField: 'text'}},formatter:_compareFormater},
            {field:'value',align:'center',title:'值',width:220,editor:{type:"textbox",options:{required:false}}},
            {field:'logic',align:'center',title:'逻辑关系',width:120,editor:{type:'combobox', options:{data:relation, valueField: 'id',textField: 'text'}},formatter:_relationFormater}
        ]]

    }).datagrid('enableCellEditing');


    function add() {
        g.datagrid("appendRow",{});
    }

    function del() {
        var rows=g.datagrid("getRows");

        var index=g.datagrid("getRowIndex",rows[rows.length-1]);
        g.datagrid("deleteRow",index);

    }
    
    function delall() {
        var row=g.datagrid("getRows").length;
        for (var i=row-1;i>=0;i--){
            g.datagrid('deleteRow',i);
        }
        _currentEditIndex=-1;
    }

</script>
用到的easyui扩展有 datagrid-cellediting.js 和以下代码


//扩展datagrid:动态添加删除editor
$.extend($.fn.datagrid.methods, {
    addEditor : function(jq, param) {
        if (param instanceof Array) {
            $.each(param, function(index, item) {
                var e = $(jq).datagrid('getColumnOption', item.field);
                e.editor = item.editor; });
        } else {
            var e = $(jq).datagrid('getColumnOption', param.field);
            e.editor = param.editor;
        }
    },
    removeEditor : function(jq, param) {
        if (param instanceof Array) {
            $.each(param, function(index, item) {
                var e = $(jq).datagrid('getColumnOption', item);
                e.editor = {};
            });
        } else {
            var e = $(jq).datagrid('getColumnOption', param);
            e.editor = {};
        }
    }
});
php部分

function search_func($data){
    $where=array();
    $arr=json_decode($data,true);
    foreach ($arr as $key=>$v) {
        if(array_key_exists('relation',$arr[$key]) && array_key_exists('field',$arr[$key])&& array_key_exists('value_star',$arr[$key])){

            $relation='';
            if($v['relation']!='null'){

                $relation=$v['relation'];
            }


            switch ($v['compare']) {
                case "like":
                    $where[$v["field"]]=array($v['compare'],'%'.$v['value_star'].'%',$relation);
                    break;
                case "between":

                case "not between":

                case "between time":

                case "not between time":
                    $where[$v["field"]]=array($v['compare'],[$v['value_star'],$v['value_end']],$relation);
                    break;
                case "in":

                case "not in":
                    $where[$v["field"]]=array($v['compare'],[$v['value_star']],$relation);
                    break;
                case "null":

                case "not null":
                    $where[$v["field"]]=array($v['compare'],$relation);
                    break;

                default:
                    $where[$v["field"]]=array($v['compare'],$v['value_star'],$relation);
                    break;
            }

        }


    }
    return $where;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逍遥596607010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值