五、easyUI中的datagrid(数据表格)组件

1.datagrid(数据表格)组件的概述

datagrid以表格形式展示数据,并提供了丰富的选择、排序、分组和编辑数据的功能支持。datagrid的设计用于缩短开发时间,并且使开发人员不需要具备特定的知识。它是轻量级的且功能丰富,单元格合并、多列标题、冻结列和页脚只是其中的一小部分功能。

2.datagrid(数据表格)组件的使用

使用JavaScript去创建datagrid组件,通过datagrid组件自带的url属性请求数据。通过url属性加载数据实际上是easyUI底层通过Ajax请求数据,然后显示在页面中,这个过程是在页面加载完成后执行的。新建一个05-datagrid.html页面。

通过url请求传给它的数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>datagrid</title>
    <!-- 引入easyUI的css文件和js库 -->
    <link rel="stylesheet" type="text/css" href="./js/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="./js/themes/icon.css">
    <script type="text/javascript" src="./js/jquery.min.js"></script>
    <script type="text/javascript" src="./js/jquery.easyui.min.js"></script>
</head>
<body>
    <table id="dg"></table>

    <script type="text/javascript">
        $(function() {
            // 页面加载完成后,创建数据表格datagrid
            $('#dg').datagrid({
                //指定数据表格发送Ajax请求的地址
                url:'./data/datagrid_data1.json',
                //定义标题行所有的列,注意这是一个二维数组
                columns:[[
                    //像field、title等就是列属性
                    {field:'productid',title:'商品编号',width:100},
                    {field:'productname',title:'商品名称',width:100},
                    {field:'unitcost',title:'商品单价',width:100,align:'left'},
                    {field:'status',title:'商品状态',width:100,align:'right'},
                    {field:'attr1',title:'商品属性',width:100,align:'right'},
                ]]
            });
        });
    </script>
</body>
</html>

数据格式必须是一个JSON数组,示例如下:

[
  {
    "productid": "FI-SW-01",
    "productname": "Koi",
    "unitcost": "10.00",
    "status": "P",
    "listprice": "36.50",
    "attr1": "Large",
    "itemid": "EST-1"
  },
  {
    "productid": "K9-DL-01",
    "productname": "Dalmation",
    "unitcost": "12.00",
    "status": "P",
    "listprice": "18.50",
    "attr1": "Spotted Adult Female",
    "itemid": "EST-10"
  },
  {
    "productid": "RP-SN-01",
    "productname": "Rattlesnake",
    "unitcost": "12.00",
    "status": "P",
    "listprice": "38.50",
    "attr1": "Venomless",
    "itemid": "EST-11"
  },
  {
    "productid": "RP-SN-01",
    "productname": "Rattlesnake",
    "unitcost": "12.00",
    "status": "P",
    "listprice": "26.50",
    "attr1": "Rattleless",
    "itemid": "EST-12"
  },
  {
    "productid": "RP-LI-02",
    "productname": "Iguana",
    "unitcost": "12.00",
    "status": "P",
    "listprice": "35.50",
    "attr1": "Green Adult",
    "itemid": "EST-13"
  },
  {
    "productid": "FL-DSH-01",
    "productname": "Manx",
    "unitcost": "12.00",
    "status": "P",
    "listprice": "158.50",
    "attr1": "Tailless",
    "itemid": "EST-14"
  },
  {
    "productid": "FL-DSH-01",
    "productname": "Manx",
    "unitcost": "12.00",
    "status": "P",
    "listprice": "83.50",
    "attr1": "With tail",
    "itemid": "EST-15"
  },
  {
    "productid": "FL-DLH-02",
    "productname": "Persian",
    "unitcost": "12.00",
    "status": "P",
    "listprice": "23.50",
    "attr1": "Adult Female",
    "itemid": "EST-16"
  },
  {
    "productid": "FL-DLH-02",
    "productname": "Persian",
    "unitcost": "12.00",
    "status": "P",
    "listprice": "89.50",
    "attr1": "Adult Male",
    "itemid": "EST-17"
  },
  {
    "productid": "AV-CB-01",
    "productname": "Amazon Parrot",
    "unitcost": "92.00",
    "status": "P",
    "listprice": "63.50",
    "attr1": "Adult Male",
    "itemid": "EST-18"
  }
]

使用到了datagrid组件的两个属性,如下列表所示:

属性名属性值类型描述默认值
columnsarrayDataGrid列配置对象,详见列属性说明中更多的细节undefined
urlstring一个UR!从远程站点请求数据null

也用到了如下列表所示的三个列属性

属性名称属性值类型描述默认值
titlestring列标题文本undefined
fieldstring列字段名称。undefined
alignstring指明如何对齐列数据。可以使用的值有: eft,right,centerundefined

field属性后面跟的是通过Ajax请求响应回来的JSON数组中的每一个JSON对象中的属性名称,例如productid

在这里插入图片描述

运行的结果如下图所示:

在这里插入图片描述

数据表格要间隔变色显示,需要用到datagrid组件的striped属性

属性名属性值类型描述默认值
stripedboolean是否显示斑马线效果false

05-datagrid.html页面的内容就要修改成下面这个样子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>datagrid</title>
    <!-- 引入easyUI的css文件和js库 -->
    <link rel="stylesheet" type="text/css" href="./js/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="./js/themes/icon.css">
    <script type="text/javascript" src="./js/jquery.min.js"></script>
    <script type="text/javascript" src="./js/jquery.easyui.min.js"></script>
</head>
<body>
    <table id="dg"></table>

    <script type="text/javascript">
        $(function() {
            // 页面加载完成后,创建数据表格datagrid
            $('#dg').datagrid({
                // 指定数据表格发送Ajax请求的地址
                url:'./data/datagrid_data1.json',
                //定义标题行所有的列,注意这是一个二维数组
                columns:[[
                    // 像field、title等就是列属性
                    {field:'productid',title:'商品编号',width:100},
                    {field:'productname',title:'商品名称',width:100},
                    {field:'unitcost',title:'商品单价',width:100,align:'left'},
                    {field:'status',title:'商品状态',width:100,align:'right'},
                    {field:'attr1',title:'商品属性',width:100,align:'right'},
                ]],
                // 显示斑马线效果,即数据表格中一行显示白色,一行显示浅灰色
                striped:true
            });
        });
    </script>
</body>
</html>

运行的结果如下图所示:

在这里插入图片描述

datagrid组件提供了一个分页工具栏,想使用datagrid组件提供的分页工具栏,必须得在datagrid组件中添加pagination:true,即要用到datagrid组件的pagination属性

属性名属性值类型描述默认值
paginationboolean如果为true,则在DataGrid控件底部显示分页工具栏false
pagePositionstring定义分页工具栏的位置。可用的值有: top,bottom,both’(该属性自1.3版开始可用)bottom

使用datagrid组件提供的分页工具栏,05-datagrid.html页面的内容便要修改成下面这个样子了

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>datagrid</title>
    <!-- 引入easyUI的css文件和js库 -->
    <link rel="stylesheet" type="text/css" href="./js/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="./js/themes/icon.css">
    <script type="text/javascript" src="./js/jquery.min.js"></script>
    <script type="text/javascript" src="./js/jquery.easyui.min.js"></script>
</head>
<body>
    <table id="dg"></table>

    <script type="text/javascript">
        $(function() {
            // 页面加载完成后,创建数据表格datagrid
            $('#dg').datagrid({
                // 指定数据表格发送Ajax请求的地址
                url:'./data/datagrid_data1.json',
                //定义标题行所有的列,注意这是一个二维数组
                columns:[[
                    // 像field、title等就是列属性
                    {field:'productid',title:'商品编号',width:100},
                    {field:'productname',title:'商品名称',width:100},
                    {field:'unitcost',title:'商品单价',width:100,align:'left'},
                    {field:'status',title:'商品状态',width:100,align:'right'},
                    {field:'attr1',title:'商品属性',width:100,align:'right'},
                ]],
                // 显示斑马线效果,即数据表格中一行显示白色,一行显示浅灰色
                striped:true,
                // 显示分页工具栏
                pagination:true,
                // 分页工具栏显示的位置,默认就是在datagrid控件底部显示分页工具栏
                pagePosition:"bottom"
            });
        });
    </script>
</body>
</html>

运行的结果如下图所示:

在这里插入图片描述


发现分页工具栏默认显示的是英文,但想显示中文,得引入locale目录下的easyui-lang-zh_CN.js文件,于是,05-datagrid.html页面的内容便要修改成下面这个样子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>datagrid</title>
    <!-- 引入easyUI的css文件和js库 -->
    <link rel="stylesheet" type="text/css" href="./js/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="./js/themes/icon.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="./js/locale/easyui-lang-zh_CN.js"></script>
</head>
<body>
    <table id="dg"></table>

    <script type="text/javascript">
        $(function() {
            // 页面加载完成后,创建数据表格datagrid
            $('#dg').datagrid({
                // 指定数据表格发送Ajax请求的地址
                url:'./data/datagrid_data1.json',
                //定义标题行所有的列,注意这是一个二维数组
                columns:[[
                    // 像field、title等就是列属性
                    {field:'productid',title:'商品编号',width:100},
                    {field:'productname',title:'商品名称',width:100},
                    {field:'unitcost',title:'商品单价',width:100,align:'left'},
                    {field:'status',title:'商品状态',width:100,align:'right'},
                    {field:'attr1',title:'商品属性',width:100,align:'right'},
                ]],
                // 显示斑马线效果,即数据表格中一行显示白色,一行显示浅灰色
                striped:true,
                // 显示分页工具栏
                pagination:true,
                // 分页工具栏显示的位置,默认就是在datagrid控件底部显示分页工具栏
                pagePosition:"bottom"
            });
        });
    </script>
</body>
</html>

运行的结果如下图所示:

在这里插入图片描述

其中,datagrid组件还有一个pageList属性,如下列表所示:

属性名属性值类型描述默认值
pageListarray在设置分页属性的时候 初始化页面大小选择列表[10,20,30.40,50]

在05-datagrid.html页面中应用了该属性,就如下面这样

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>datagrid</title>
    <!-- 引入easyUI的css文件和js库 -->
    <link rel="stylesheet" type="text/css" href="./js/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="./js/themes/icon.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="./js/locale/easyui-lang-zh_CN.js"></script>
</head>
<body>
    <table id="dg"></table>

    <script type="text/javascript">
        $(function() {
            // 页面加载完成后,创建数据表格datagrid
            $('#dg').datagrid({
                // 指定数据表格发送Ajax请求的地址
                url:'./data/datagrid_data1.json',
                //定义标题行所有的列,注意这是一个二维数组
                columns:[[
                    // 像field、title等就是列属性
                    {field:'productid',title:'商品编号',width:100},
                    {field:'productname',title:'商品名称',width:100},
                    {field:'unitcost',title:'商品单价',width:100,align:'left'},
                    {field:'status',title:'商品状态',width:100,align:'right'},
                    {field:'attr1',title:'商品属性',width:100,align:'right'},
                ]],
                // 显示斑马线效果,即数据表格中一行显示白色,一行显示浅灰色
                striped:true,
                // 显示分页工具栏
                pagination:true,
                // 分页工具栏显示的位置,默认就是在datagrid控件底部显示分页工具栏
                pagePosition:"bottom",
                //下拉列表里面写什么(在分页显示时,可以选择每页显示的记录数)
                pageList:[3,5,10]
            });
        });
    </script>
</body>
</html>

运行的结果如下图所示:

在这里插入图片描述

一般来说,每一行记录最后面的那列都代表的是一组操作,例如修改或者删除,以方便对记录执行修改或者删除操作,就像下图所示的那样。

在这里插入图片描述

要想实现这样的效果,必须用到一个列属性,即formatter属性

在这里插入图片描述

如此一来,05-datagrid.html页面便要修改成下面这个样子了

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>datagrid</title>
    <!-- 引入easyUI的css文件和js库 -->
    <link rel="stylesheet" type="text/css" href="./js/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="./js/themes/icon.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="./js/locale/easyui-lang-zh_CN.js"></script>
</head>
<body>
    <table id="dg"></table>

    <script type="text/javascript">
        $(function() {
            // 页面加载完成后,创建数据表格datagrid
            $('#dg').datagrid({
                // 指定数据表格发送Ajax请求的地址
                url:'./data/datagrid_data1.json',
                //定义标题行所有的列,注意这是一个二维数组
                columns:[[
                    // 像field、title等就是列属性
                    {field:'productid',title:'商品编号',width:100},
                    {field:'productname',title:'商品名称',width:100},
                    {field:'unitcost',title:'商品单价',width:100,align:'left'},
                    {field:'status',title:'商品状态',width:100,align:'right'},
                    {field:'attr1',title:'商品属性',width:100,align:'right'},
                    {field:'xxxx',title:'操作',width:100,align:'left', formatter:function(value,row,index) {
                            // row为行记录,index是每一行的行号从0开始
                            console.log(value, row, index);
                            return "<a href='#'>修改</a> | <a href='#'>删除</a>";
                        }
                    }
                ]],
                // 显示斑马线效果,即数据表格中一行显示白色,一行显示浅灰色
                striped:true,
                // 显示分页工具栏
                pagination:true,
                // 分页工具栏显示的位置,默认就是在datagrid控件底部显示分页工具栏
                pagePosition:"bottom",
                //下拉列表里面写什么(在分页显示时,可以选择每页显示的记录数)
                pageList:[3,5,10]
            });
        });
    </script>
</body>
</html>

输出结果如下所示:

在这里插入图片描述

前台向后台发送的请求是一个Ajax请求,这时并没有刷新页面,也就是说当前所在页面只需要通过在原来的基础上+1或者-1即可,总页数又可以通过计算得知。所以,具体的响应数据的格式应该像下面这样

{
  "total": 28,
  "rows": [{
    "productid": "FI-SW-01",
    "productname": "Koi",
    "unitcost": "10.00",
    "status": "P",
    "listprice": "36.50",
    "attr1": "Large",
    "itemid": "EST-1"
  },
    {
      "productid": "K9-DL-01",
      "productname": "Dalmation",
      "unitcost": "12.00",
      "status": "P",
      "listprice": "18.50",
      "attr1": "Spotted Adult Female",
      "itemid": "EST-10"
    },
    {
      "productid": "RP-SN-01",
      "productname": "Rattlesnake",
      "unitcost": "12.00",
      "status": "P",
      "listprice": "38.50",
      "attr1": "Venomless",
      "itemid": "EST-11"
    },
    {
      "productid": "RP-SN-01",
      "productname": "Rattlesnake",
      "unitcost": "12.00",
      "status": "P",
      "listprice": "26.50",
      "attr1": "Rattleless",
      "itemid": "EST-12"
    },
    {
      "productid": "RP-LI-02",
      "productname": "Iguana",
      "unitcost": "12.00",
      "status": "P",
      "listprice": "35.50",
      "attr1": "Green Adult",
      "itemid": "EST-13"
    },
    {
      "productid": "FL-DSH-01",
      "productname": "Manx",
      "unitcost": "12.00",
      "status": "P",
      "listprice": "158.50",
      "attr1": "Tailless",
      "itemid": "EST-14"
    },
    {
      "productid": "FL-DSH-01",
      "productname": "Manx",
      "unitcost": "12.00",
      "status": "P",
      "listprice": "83.50",
      "attr1": "With tail",
      "itemid": "EST-15"
    },
    {
      "productid": "FL-DLH-02",
      "productname": "Persian",
      "unitcost": "12.00",
      "status": "P",
      "listprice": "23.50",
      "attr1": "Adult Female",
      "itemid": "EST-16"
    },
    {
      "productid": "FL-DLH-02",
      "productname": "Persian",
      "unitcost": "12.00",
      "status": "P",
      "listprice": "89.50",
      "attr1": "Adult Male",
      "itemid": "EST-17"
    },
    {
      "productid": "AV-CB-01",
      "productname": "Amazon Parrot",
      "unitcost": "92.00",
      "status": "P",
      "listprice": "63.50",
      "attr1": "Adult Male",
      "itemid": "EST-18"
    }
  ]
}
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
easyui vue 数据表格下拉框的实现步骤如下: 1. 引入 easyui 和 vue 相关的 js 和 css 文件。 2. 创建一个 vue 实例,并定义一个数组用于存放下拉框的选项数据。 3. 在 HTML 使用 easyuidatagrid 组件,并设置 columns 属性,其需要使用 formatter 属性将某一列的数据转换为下拉框。 4. 在 formatter 使用 easyui 的 combobox 组件,并将选项数据绑定到该组件。 5. 在 vue 实例定义一个方法,用于获取下拉框的选项数据,并将其赋值给选项数据数组。 6. 在 created 钩子函数调用该方法,以获取初始的选项数据。 代码示例: HTML: ``` <div id="app"> <table id="datagrid" class="easyui-datagrid" :data="data"> <thead> <tr> <th field="name" width="50%">Name</th> <th field="gender" width="50%" formatter="genderFormatter">Gender</th> </tr> </thead> </table> </div> ``` JavaScript: ``` var app = new Vue({ el: '#app', data: { data: [] }, methods: { getGenderOptions: function() { // 获取下拉框选项数据 return [ { value: 'M', text: 'Male' }, { value: 'F', text: 'Female' } ]; }, genderFormatter: function(value, row) { // 将数据转换为下拉框 var options = this.getGenderOptions(); var selectedValue = row.gender; var html = '<select class="easyui-combobox" style="width:100%;" data-options="'; html += 'valueField: \'value\','; html += 'textField: \'text\','; html += 'data: ' + JSON.stringify(options) + '"'; html += '>'; for (var i = 0; i < options.length; i++) { var option = options[i]; var selected = option.value === selectedValue ? 'selected' : ''; html += '<option value="' + option.value + '" ' + selected + '>' + option.text + '</option>'; } html += '</select>'; return html; } }, created: function() { // 初始化数据 this.data = [ { name: 'John Doe', gender: 'M' }, { name: 'Jane Doe', gender: 'F' } ]; // 获取下拉框选项数据 var options = this.getGenderOptions(); // 在 easyui 加载完成后将选项数据绑定到下拉框 $('#datagrid').datagrid({ onLoadSuccess: function(data) { $.each(data.rows, function(index, row) { var $combobox = $(this).datagrid('getPanel').find('td[field="gender"] div select'); $combobox.combobox('loadData', options); $combobox.combobox('setValue', row.gender); }); } }); } }); ``` 需要注意的是,在 easyui 加载完成后,需要将选项数据绑定到下拉框,这里使用了 jquery 的 each 方法遍历每一行数据,并通过 easyui 的 combobox 组件将选项数据绑定到对应的下拉框

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值