简单的UI Treegrid,在所有列上都有搜索过滤器

时间:2017-02-09 08:18:12

标签: jquery-ui jeasyui

我无法在每列上使用搜索过滤器实现treegrid。在简单的UI论坛中,他们已经告诉了“datagrid-Filter.js'也适用于treegrid。我使用了他们在客户端分页http://www.jeasyui.com/demo/main/index.php?plugin=TreeGrid&theme=default&dir=ltr&pitem=

中使用的相同代码

过滤器输入元素即将到来,但它们不会过滤任何数据。我正在添加我开发的代码。请帮我解决这个问题,比如



<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Client Side Pagination in TreeGrid - jQuery EasyUI Demo</title>
    <link rel="stylesheet" type="text/css" href="css/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="css/themes/icon.css">
    <link rel="stylesheet" type="text/css" href="css/demo.css">
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/jquery.easyui.min.js"></script>
     <script type="text/javascript" src="datagrid-filter.js"></script>
    
</head>
<body>
    <h2>Client Side Pagination in TreeGrid</h2>
    <p>This sample shows how to implement client side pagination in TreeGrid.</p>
    <div style="margin:20px 0;"></div>
    <table id="tg" title="Client Side Pagination" style="width:700px;height:250px"
            data-options="
                iconCls: 'icon-ok',
                rownumbers: true,
                animate: true,
                collapsible: true,
                fitColumns: true,
                url: 'treegrid_data2.json',
                method: 'get',
                idField: 'id',
                treeField: 'name',
                pagination: true,
                remoteFilter: false,
                pageSize: 2,
                pageList: [2,5,10]
            ">
        <thead>
            <tr>
                <th data-options="field:'name',width:180">Task Name</th>
                <th data-options="field:'persons',width:60,align:'right'">Persons</th>
                <th data-options="field:'begin',width:80">Begin Date</th>
                <th data-options="field:'end',width:80">End Date</th>
                
            </tr>
        </thead>
    </table>
    <script type="text/javascript">
      //** client pagination by EASY UI**//
        (function($){
            function pagerFilter(data){
                if ($.isArray(data)){    // is array  
                    data = {  
                        total: data.length,  
                        rows: data  
                      
                    }  
                }
                var target = this;
                var tg = $(target);  
                var state = tg.data('treegrid');
                var opts = tg.treegrid('options');  
                if (!state.allRows){
                    state.allRows = data.rows;
                }
                if (!opts.remoteSort && opts.sortName){
                    var names = opts.sortName.split(',');
                    var orders = opts.sortOrder.split(',');
                    state.allRows.sort(function(r1,r2){
                        var r = 0;
                        for(var i=0; i<names.length; i++){
                            var sn = names;
                            var so = orders;
                            var col = $(target).treegrid('getColumnOption', sn);
                            var sortFunc = col.sorter || function(a,b){
                                return a==b ? 0 : (a>b?1:-1);
                            };
                            r = sortFunc(r1[sn], r2[sn]) * (so=='asc'?1:-1);
                            if (r != 0){
                                return r;
                            }
                        }
                        return r;
                    });
                }
                var topRows = [];
                var childRows = [];
                $.map(state.allRows, function(row){
                    row._parentId ? childRows.push(row) : topRows.push(row);
                    row.children = null;
                });
                data.total = topRows.length;
                var pager = tg.treegrid('getPager');
                pager.pagination('refresh', {
                    total: data.total,
                    pageNumber: opts.pageNumber
                });
                opts.pageNumber = pager.pagination('options').pageNumber || 1;
                var start = (opts.pageNumber-1)*parseInt(opts.pageSize);  
                var end = start + parseInt(opts.pageSize);  
                data.rows = topRows.slice(start, end).concat(childRows);
                return data;
            }
 
            var appendMethod = $.fn.treegrid.methods.append;
            var removeMethod = $.fn.treegrid.methods.remove;
            var loadDataMethod = $.fn.treegrid.methods.loadData;
            $.extend($.fn.treegrid.methods, {
                clientPaging: function(jq){
                    return jq.each(function(){
                        var tg = $(this);
                        var state = tg.data('treegrid');
                        var opts = state.options;
                        opts.loadFilter = pagerFilter;
                        var onBeforeLoad = opts.onBeforeLoad;
                        opts.onBeforeLoad = function(row,param){
                            state.allRows = null;
                            return onBeforeLoad.call(this, row, param);
                        }
                        var pager = tg.treegrid('getPager');
                        pager.pagination({
                            onSelectPage:function(pageNum, pageSize){
                                opts.pageNumber = pageNum;
                                opts.pageSize = pageSize;
                                pager.pagination('refresh',{
                                    pageNumber:pageNum,
                                    pageSize:pageSize
                                });
                                tg.treegrid('loadData',state.allRows);
                            }
                        });
                        tg.treegrid('loadData', state.data);
                        if (opts.url){
                            tg.treegrid('reload');
                        }
                    });
                },
                loadData: function(jq, data){
                    jq.each(function(){
                        $(this).data('treegrid').allRows = null;
                    });
                    return loadDataMethod.call($.fn.treegrid.methods, jq, data);
                },
                append: function(jq, param){
                    return jq.each(function(){
                        var state = $(this).data('treegrid');
                        if (state.options.loadFilter == pagerFilter){
                            $.map(param.data, function(row){
                                row._parentId = row._parentId || param.parent;
                                state.allRows.push(row);
                            });
                            $(this).treegrid('loadData', state.allRows);
                        } else {
                            appendMethod.call($.fn.treegrid.methods, $(this), param);
                        }
                    })
                },
                remove: function(jq, id){
                    return jq.each(function(){
                        if ($(this).treegrid('find', id)){
                            removeMethod.call($.fn.treegrid.methods, $(this), id);
                        }
                        var state = $(this).data('treegrid');
                        if (state.options.loadFilter == pagerFilter){
                            for(var i=0; i<state.allRows.length; i++){
                                if (state.allRows[state.options.idField] == id){
                                    state.allRows.splice(i,1);
                                    break;
                                }
                            }
                            $(this).treegrid('loadData', state.allRows);
                        }
                    })
                },
                getAllRows: function(jq){
                    return jq.data('treegrid').allRows;
                }
            });
 
        })(jQuery);
 
        function formatProgress(value){
            if (value){
                var s = '<div style="width:100%;border:1px solid #ccc">' +
                        '<div style="width:' + value + '%;background:#cc0000;color:#fff">' + value + '%' + '</div>'
                        '</div>';
                return s;
            } else {
                return '';
            }
        }
// ** end of cleint pagination **//        
        $(function(){
 ///////////////////////////////////////////////////////////////////////          
          $('#tg').treegrid().treegrid('clientPaging');
/////////////////////////////////////////////////////////////////////////
            $('#tg').treegrid('enableFilter', [{
                field:'name',
                type:'validatebox',
                op:['contains']
                }]);
////////////////////////////////////////////////////////////////////////
        })
    </script>
</body>
</html>
&#13;
&#13;
&#13;

提前。

1 个答案:

答案 0 :(得分:0)

你好我弄清楚是什么问题。 这个解决方案对我有用。

<%@page import="org.apache.log4j.Logger"%>
<%@page import="com.development.util.CustomLogger"%>
<%@page import="com.development.util.CommonUtility"%>
<%@page import="com.agile.api.IAgileSession"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
    <link rel="stylesheet" type="text/css" href="css/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="css/themes/icon.css">
    <link rel="stylesheet" type="text/css" href="css/themes/color.css">
    <link rel="stylesheet" type="text/css" href="css/overlay.css">
    <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="js/jquery.easyui.min.js"></script>
    <script type="text/javascript" src="js/datagrid-filter.js"></script>

</head>
<body>
<div id="tablediv">
<table id="tg" title="Client Side Pagination" style="height:600px;width:100%;">
  <thead>
<tr>
  <th data-options="field:'name',width:'30%'">Task Name</th>
  <th data-options="field:'persons',width:80,sortable:true,align:'right'">Persons</th>
  <th data-options="field:'begin',width:80">Begin Date</th>
  <th data-options="field:'end',width:'10%'">End Date</th>
  <th data-options="field:'progress',width:'10%'">Progress</th>
</tr>
  </thead>
</table>
</div>
</body>
<script>
var data = {"total":7,"rows":[
  {"id":1,"name":"All Tasks","begin":"3/4/2010","end":"3/20/2010","progress":60,"iconCls":"icon-ok"},
{"id":2,"name":"Designing","begin":"3/4/2010","end":"3/10/2010",
"progress":100,"_parentId":1,"state":"closed"},
      {"id":21,"name":"Database","persons":2,"begin":"3/4/2010","end":"3/6/2010","progress":100,"_parentId":2},
  {"id":22,"name":"UML","persons":1,"begin":"3/7/2010","end":"3/8/2010","progress":100,"_parentId":2},
  {"id":23,"name":"Export Document","persons":1,"begin":"3/9/2010","end":"3/10/2010","progress":100,"_parentId":2},
  {"id":3,"name":"Coding","persons":2,"begin":"3/11/2010","end":"3/18/2010","progress":80},
  {"id":4,"name":"Testing","persons":1,"begin":"3/19/2010","end":"3/20/2010","progress":20}
],"footer":[
  {"name":"Total Persons:","persons":7,"iconCls":"icon-sum"}
]};
$(function(){
  var tg = $('#tg').treegrid({
    idField: 'id',
    treeField: 'name',
    remoteFilter: false,
    pagination: true,
    pageSize: 2,
    pageList: [2,5,10],
    data: data
  });
  tg.treegrid('enableFilter').treegrid('doFilter');

});
</script>
</html>