EasyUI折叠表格层次显示detailview详解及实例

yizhihongxing

EasyUI折叠表格层次显示detailview详解及实例

介绍

在EasyUI中,可以使用折叠表格来显示分层数据。当需要在折叠的表格中显示更多详细的数据时,我们可以使用detailview来展示更多信息。

detailview可以根据EasyUI数据网格中的数据动态创建一个子网格,并在父网格中嵌入行中的图标上提供展开和收缩子网格的的链接。

教程

步骤 1: 引入必要的资源文件

为了使用EasyUI的折叠表格和detailview,我们需要引入相关的资源文件。可以通过CDN引入或者下载到本地并引入。

<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/easyui@1.9.22/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/easyui@1.9.22/themes/icon.css">
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/easyui@1.9.22/jquery.easyui.min.js"></script>

步骤 2: 创建 HTML 和 JavaScript 代码

在HTML中,我们需要添加一个EasyUI数据网格,同时为需要在detailview中显示的列添加formatter函数。

<table id="dg" class="easyui-datagrid" style="height:400px"
       url="datagrid_data1.json"
       title="DataGrid"
       toolbar="#toolbar"
       pagination="true"
       rownumbers="true"
       fitColumns="true"
       singleSelect="true">
    <thead>
        <tr>
            <th field="itemid" width="50">Item ID</th>
            <th field="productid" width="50">Product ID</th>
            <th field="listprice" width="50" formatter="priceFormatter">List Price</th>
            <th field="unitcost" width="50" formatter="priceFormatter">Unit Cost</th>
            <th field="attr1" width="100">Attribute</th>
            <th field="status" width="50" formatter="statusFormatter">Status</th>
        </tr>
    </thead>
</table>

在这个例子中,我们为List Price和Unit Cost这两列添加了formatter函数。这个函数将数值显示成货币的格式(例如: $1,000.00)。

为了添加detailview,我们需要在JavaScript代码中配置datagrid的options,并提供detailview的模板(即子表数据)。

$('#dg').datagrid({
    view: detailview,
    detailFormatter: function(index,row){
        return '<div style="padding:2px"><table class="ddv"></table></div>';
    },
    onExpandRow: function(index,row){
        var ddv = $(this).datagrid('getRowDetail',index).find('table.ddv');
        ddv.datagrid({
            url:'datagrid_data2.json',
            fitColumns:true,
            singleSelect:true,
            rownumbers:true,
            loadMsg:'',
            height:'auto',
            columns:[[
                {field:'orderid',title:'Order ID',width:100},
                {field:'shipname',title:'Name',width:100},
                {field:'shiptime',title:'Shipped Da',
                 width:150,align:'right'}
            ]],
            onResize:function(){
                $('#dg').datagrid('fixDetailRowHeight',index);
            },
            onLoadSuccess:function(){
                setTimeout(function(){
                    $('#dg').datagrid('fixDetailRowHeight',index);
                },0);
            }
        });
        $('#dg').datagrid('fixDetailRowHeight',index);
    }
});

在这个例子中,我们设置了onExpandRow事件来加载并显示子网格。(举个例子)当用户展开一个行时,数据从异步加载的datagrid_data2.json 文件中返回。另外,onResize和onLoadSuccess事件也被绑定到了子网格中。onResize事件确保子网格具有正确的大小,而onLoadSuccess事件确保网格在加载后立即正确显示。

步骤 3: 完整代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/easyui@1.9.22/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/easyui@1.9.22/themes/icon.css">
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/easyui@1.9.22/jquery.easyui.min.js"></script>
    <script type="text/javascript">
        var detailview = $.extend({}, $.fn.datagrid.defaults.view, {
            renderRow: function (target, fields, frozen, rowIndex, rowData) {
                var cc = [];
                cc.push('<tr class="datagrid-row-detail">');
                if (!frozen) {
                    cc.push('<td colspan="' + fields.length + '">');
                    cc.push('<div style="padding:5px 0;border-bottom:1px solid #ccc">');
                    cc.push('<table class="ddv"></table>');
                    cc.push('</div>');
                    cc.push('</td>');
                }
                cc.push('</tr>');
                return cc.join('');
            },
            onAfterRender: function (target) {
                $.fn.datagrid.defaults.view.onAfterRender.call(this, target);
                var opts = $(target).datagrid('options');
                if (!opts.addonBody) {
                    return;
                }
                if (opts.rownumbers || (opts.frozenColumns && opts.frozenColumns.length > 0)) {
                    return;
                }
                var tr = opts.finder.getTr(target, '', 'view', 2);
                var table = tr.parent().parent().parent();
                var tc = $('<td colspan="' + (opts.frozenColumns.length) + '"></td>').insertBefore(tr.children(':first'));
                var div = $('<div class="datagrid-view2-addon"></div>').html(opts.addonBody).appendTo(tc);
                setTimeout(function () {
                    div.triggerHandler('_resize');
                }, 0);
            },
            onBeforeRender: function (target) {
                var opts = $(target).datagrid('options');
                var vc = $(target).datagrid('getPanel').children('div.datagrid-view');
                opts.addonBody = null;
                if (opts.addonView && vc.children('style').length == 0) {
                    vc.prepend('<style>' + opts.addonView + '</style>');
                }
            },
            onDestroy: function () {
                var opts = $(this).datagrid('options');
                if (opts.addonView) {
                    var vc = $(this).datagrid('getPanel').children('div.datagrid-view');
                    vc.children('style').remove();
                }
            }
        });

        function priceFormatter(value,row,index){
            return '$' + value.toFixed(2);
        }

        function statusFormatter(value,row,index){
            if (value == 'P'){
                return '<span style="color:green">Processed</span>';
            } else if (value == 'D'){
                return '<span style="color:red">Discontinued</span>';
            }
            return value;
        }

        $(function(){
            $('#dg').datagrid({
                view: detailview,
                detailFormatter: function(index,row){
                    return '<div style="padding:2px"><table class="ddv"></table></div>';
                },
                onExpandRow: function(index,row){
                    var ddv = $(this).datagrid('getRowDetail',index).find('table.ddv');
                    ddv.datagrid({
                        url:'datagrid_data2.json',
                        fitColumns:true,
                        singleSelect:true,
                        rownumbers:true,
                        loadMsg:'',
                        height:'auto',
                        columns:[[
                            {field:'orderid',title:'Order ID',width:100},
                            {field:'shipname',title:'Name',width:100},
                            {field:'shiptime',title:'Shipped Da',width:150,align:'right'}
                        ]],
                        onResize:function(){
                            $('#dg').datagrid('fixDetailRowHeight',index);
                        },
                        onLoadSuccess:function(){
                            setTimeout(function(){
                                $('#dg').datagrid('fixDetailRowHeight',index);
                            },0);
                        }
                    });
                    $('#dg').datagrid('fixDetailRowHeight',index);
                }
            });
        });
    </script>
</head>
<body>
<div>
    <table id="dg" class="easyui-datagrid" style="height:400px"
           url="datagrid_data1.json"
           title="DataGrid"
           toolbar="#toolbar"
           pagination="true"
           rownumbers="true"
           fitColumns="true"
           singleSelect="true">
        <thead>
        <tr>
            <th field="itemid" width="50">Item ID</th>
            <th field="productid" width="50">Product ID</th>
            <th field="listprice" width="50" formatter="priceFormatter">List Price</th>
            <th field="unitcost" width="50" formatter="priceFormatter">Unit Cost</th>
            <th field="attr1" width="100">Attribute</th>
            <th field="status" width="50" formatter="statusFormatter">Status</th>
        </tr>
        </thead>
    </table>
</div>
</body>
</html>

这个例子将显示一个简单的datagrid,当用户点击一个行时,子网格将在该行下显示。子网格中将显示另一个数据文件 datagrid_data2.json 的内容,并且在每列的末尾都会显示一个详细信息链接。

步骤 4: 示例说明

我们代码的使用了两个例子:

  1. 在源码 example1.html 文件中,会通过 Ajax 方式从后端获取数据,并在 EasyUI 表格中展示出来,用户点击"+"展开折叠表格,然后展示子表格的详细信息。
  2. 在 example2.html 文件中,使用静态Json数据,在EasyUI 表格中展示带detailview的折叠表格,使用detailview来展示更多信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:EasyUI折叠表格层次显示detailview详解及实例 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 发挥火狐浏览器的广告拦截威力(图文教程)

    发挥火狐浏览器的广告拦截威力(图文教程) 广告拦截器是现代浏览器中常见的功能,能够帮助用户过滤广告和恶意网站,提高网页浏览的速度和安全性。本文将针对使用火狐浏览器的用户,介绍如何发挥火狐浏览器的广告拦截威力。 步骤一:启用火狐浏览器的广告拦截器功能 打开火狐浏览器,点击右上角的菜单按钮(三个横线)。 在下拉菜单中选择“选项(Options)”。 在弹出的“选…

    css 2023年6月11日
    00
  • js获取及修改网页背景色和字体色的方法

    获取及修改网页背景色和字体颜色是web前端开发常见操作。下面是如何使用JS获取及修改网页背景色和字体色的攻略。 获取网页背景色和字体颜色 获取背景色 方法一:通过document.body.style.backgroundColor获取网页背景色 console.log(document.body.style.backgroundColor); // 输出网…

    css 2023年6月9日
    00
  • javascript 表格排序和表头浮动效果(扩展SortTable)

    下面我将为你详细讲解“javascript 表格排序和表头浮动效果(扩展SortTable)”的攻略。 什么是SortTable SortTable 是一个 JavaScript 组件,能够对网页中的表格进行排序。它只需要在表格所在的 HTML 文件中添加一个脚本并在 HTML 表格元素中设置表头即可。在表头上单击,用户可以将表格按列排序。 表格排序 以下是…

    css 2023年6月9日
    00
  • css教程:选择合适的、有意义的元素描述内容

    选择合适的、有意义的元素描述内容是CSS在前端开发中的重要指导原则之一。简单来说,就是在HTML代码中选择合适的HTML元素,并使用CSS对其进行样式修饰,从而让页面结构更加清晰、易读、易维护。下面是详细的攻略: 1. 选择合适的HTML元素 在HTML中,我们可以利用各种标签来描述网页的结构和内容,如 、 、 、 等。选择合适的HTML元素可以提高页面的可…

    css 2023年6月10日
    00
  • CSS网页实例 利用box-sizing实现div仿框架结构实现代码

    下面我会提供一个详细的攻略来讲解“CSS网页实例 利用box-sizing实现div仿框架结构实现代码”。首先,我们需要了解box-sizing的概念。 box-sizing是CSS3中的一个属性,用于指定盒子的尺寸计算模式,默认值为content-box。在content-box模式下,盒子的宽度和高度只包括内容的尺寸,而不包括边框和内边距的尺寸。而在bo…

    css 2023年6月10日
    00
  • 提高代码可读性的十大注释技巧分享

    提高代码可读性是一项非常重要的工作,注释是其中的关键步骤。在这里我会分享十大注释技巧,帮助你提高代码的可读性。 1. 代码块注释 一般情况下,注释应该放在代码块的上方。它们应该被紧密地排列在一起,与其他代码相隔一行。这是一个好的做法,因为代码变化后注释不会随之漂移,也为编写者提供了改动区域的视觉提示。例如: # 这是一个函数的注释 def my_functi…

    css 2023年6月9日
    00
  • JS+css 图片自动缩放自适应大小

    想要实现图片的自动缩放和自适应大小,我们可以借助JavaScript和CSS技术来实现。以下是具体的攻略: 1.通过CSS设置图片的最大宽度和高度,使得图片能够适应不同的屏幕尺寸,并保持其长宽比不变: img { max-width: 100%; max-height: 100%; } 2.借助JavaScript技术,在图片加载完成之后对图片进行大小的计算…

    css 2023年6月10日
    00
  • CSS样式覆盖的操作代码

    CSS样式覆盖是指在多个CSS规则应用于同一元素时,某些规则将覆盖其他规则的情况。以下是一个详细的攻略,介绍了CSS样式覆盖的操作代码,包括两个示例说明: 1. CSS样式覆盖的操作代码 !important 在CSS规则中使用!important关键字可以强制将某个样式属性应用于元素,即使该属性的优先级较低。例如: p { color: red !impo…

    css 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部