jqgrid 表格数据导出实例

yizhihongxing

下面我将为您详细讲解“jqGrid 表格数据导出实例”的完整攻略。

一、简介

jqGrid 是基于 jQuery 的一款能够呈现和编辑数据表格的插件。它可以在网页上方便地实现可分页、可排序、列的过滤等功能,并支持丰富的前端事件和样式定制。本文重点介绍 jqGrid 的数据导出功能实现。

二、环境搭建

使用 jqGrid 前,需要下载 jqGrid 的 JS 和 CSS 文件,并且需要引入 jQuery。

下面是一个简单的页面示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jqGrid 示例</title>
    <link rel="stylesheet" href="/path/to/jquery-ui.css">
    <link rel="stylesheet" href="/path/to/ui.jqgrid.css">
    <script src="/path/to/jquery.js"></script>
    <script src="/path/to/jquery-ui.js"></script>
    <script src="/path/to/jquery.jqgrid.js"></script>
</head>
<body>
    <table id="myGrid"></table>
    <div id="myPager"></div>

    <script>
        $(function () {
            $("#myGrid").jqGrid({
                url: '/path/to/data.json',
                datatype: 'json',
                colModel: [
                    {name: 'id', index: 'id', width: 60, sorttype: "int"},
                    {name: 'name', index: 'name', width: 100},
                    {name: 'amount', index: 'amount', width: 80, align: "right", sorttype: "float"},
                    {name: 'price', index: 'price', width: 80, align: "right", sorttype: "float"},
                    {name: 'total', index: 'total', width: 80, align: "right", sorttype: "float"},
                    {name: 'note', index: 'note', width: 150, sortable: false}
                ],
                rowNum: 10,
                rowList: [10, 20, 30],
                pager: '#myPager',
                sortname: 'id',
                viewrecords: true,
                sortorder: "desc",
                caption: "数据表格示例"
            });
        });
    </script>
</body>
</html>

上面的代码中,我们使用 $("#myGrid").jqGrid(options); 初始化了一个数据表格,其中:

  • url 是 table 的请求地址;
  • datatype 指定了数据类型,这里为 JSON;
  • colModel 是列模型,定义了表格的列名和特性;
  • rowNum 是默认每页行数;
  • rowList 是每页行数的下拉列表;
  • pager 是分页工具栏;
  • sortname 是默认排序列;
  • viewrecords 显示表格的总记录数;
  • sortorder 是默认排序方式;
  • caption 是表格标题。

三、数据导出

在表格上面添加一个“导出”按钮,点击该按钮即可导出表格中的数据。下面是具体实现过程。

  1. 定义导出按钮
<button id="exportBtn">导出</button>
  1. 添加导出事件
$("#exportBtn").click(function () {
    var postData = $("#myGrid").jqGrid("getGridParam", "postData");
    // 新建表格
    var $table = $("<table>");
    // 添加表头
    var $thead = $("<thead>").append("<tr><th>ID</th><th>名称</th><th>数量</th><th>价格</th><th>总价</th><th>备注</th></tr>").appendTo($table);
    // 添加表身
    $.ajax({
        url: "/path/to/export.php",
        type: "post",
        dataType: "json",
        data: postData,
        success: function (data) {
            var $tbody = $("<tbody>");
            $.each(data.rows, function (i, row) {
                var $tr = $("<tr>");
                $("<td>").text(row.id).appendTo($tr);
                $("<td>").text(row.name).appendTo($tr);
                $("<td>").text(row.amount).appendTo($tr);
                $("<td>").text(row.price).appendTo($tr);
                $("<td>").text(row.total).appendTo($tr);
                $("<td>").text(row.note).appendTo($tr);
                $tr.appendTo($tbody);
            });
            $tbody.appendTo($table);
            // 调用表格导出函数
            exportExcel($table);
        }
    });
});

在上面的代码中,我们通过 $.ajax() 将当前表格的 postData 发送到服务端,获取表体数据,并按“ID”、“名称”、“数量”、“价格”、“总价”、“备注”的顺序填充到表格中。最后将整个表格传递给 exportExcel() 函数进行导出。

  1. 表格导出函数
function exportExcel($table) {
    var uri = 'data:application/vnd.ms-excel;base64,';
    // 获取表头和表身数据,按照“ID-名称-数量-价格-总价-备注”的顺序组合
    var ctx = {worksheet: "", table: $table.html()};
    var base64 = function(s) {
        return window.btoa(unescape(encodeURIComponent(s)));
    };
    // 文件名为当前日期
    var today = new Date();
    var name = "Table-" + today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate() + ".xls";
    // 下载表格
    var link = document.createElement("a");
    link.download = name;
    link.href = uri + base64(ctx.table);
    link.click();
}

在上面的代码中,我们通过 window.btoa() 将数据进行 base64 编码,并定义了一个 ctx 变量来存储表头和表身数据。然后创建一个 <a> 标签来下载该表格。

四、示例说明

示例一

假如我们需要按照“名称”来对表格数据进行排序,并导出按照该排序筛选的表格数据,那么代码如下:

$(function () {
    $("#myGrid").jqGrid({
        url: '/path/to/data.json',
        datatype: 'json',
        colModel: [
            {name: 'id', index: 'id', width: 60, sorttype: "int"},
            {name: 'name', index: 'name', width: 100},
            {name: 'amount', index: 'amount', width: 80, align: "right", sorttype: "float"},
            {name: 'price', index: 'price', width: 80, align: "right", sorttype: "float"},
            {name: 'total', index: 'total', width: 80, align: "right", sorttype: "float"},
            {name: 'note', index: 'note', width: 150, sortable: false}
        ],
        rowNum: 10,
        rowList: [10, 20, 30],
        pager: '#myPager',
        sortname: 'name',
        viewrecords: true,
        sortorder: "asc",
        caption: "数据表格示例"
    });

    $("#exportBtn").click(function () {
        var postData = $("#myGrid").jqGrid("getGridParam", "postData");
        // 新建表格
        var $table = $("<table>");
        // 添加表头
        var $thead = $("<thead>").append("<tr><th>ID</th><th>名称</th><th>数量</th><th>价格</th><th>总价</th><th>备注</th></tr>").appendTo($table);
        // 添加表身
        $.ajax({
            url: "/path/to/export.php",
            type: "post",
            dataType: "json",
            data: postData,
            success: function (data) {
                var $tbody = $("<tbody>");
                $.each(data.rows, function (i, row) {
                    var $tr = $("<tr>");
                    $("<td>").text(row.id).appendTo($tr);
                    $("<td>").text(row.name).appendTo($tr);
                    $("<td>").text(row.amount).appendTo($tr);
                    $("<td>").text(row.price).appendTo($tr);
                    $("<td>").text(row.total).appendTo($tr);
                    $("<td>").text(row.note).appendTo($tr);
                    $tr.appendTo($tbody);
                });
                $tbody.appendTo($table);
                // 调用表格导出函数
                exportExcel($table);
            }
        });
    });
});

示例二

假如我们需要只显示“名称为 A 或 B”的数据行,并导出该表格数据,那么我们需要修改上述代码中的 postData

$("#exportBtn").click(function () {
    var postData = $("#myGrid").jqGrid("getGridParam", "postData");
    postData.filters = '{ "groupOp": "OR", "rules": [ { "field": "name", "op": "eq", "data": "A" }, { "field": "name", "op": "eq", "data": "B" } ] }';
    // 新建表格
    var $table = $("<table>");
    // ...
});

注意,filters 是字符串类型的 JSON 数据,它指定了表格数据的过滤规则。示例中,我们将这个值设为了“名称为 A 或 B”的记录。需要注意的是,groupOp 为“OR”表示“或”关系,可以将多个“rules”行程“与”关系或“或”关系组合出不同的过滤条件,具体请参考 jqGrid 的文档。

五、总结

本文介绍了如何使用 jqGrid 导出数据表格,同时附带了示例代码来帮助读者更好的理解 jqGrid 的使用。欢迎大家在实践过程中提出问题,我们将竭尽所能给予帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jqgrid 表格数据导出实例 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • MySQL MHA信息的收集【Filebeat+logstash+MySQL】

    一.项目背景 随着集团MHA集群的日渐增长,MHA管理平台话越来越迫切。而MHA平台的建设第一步就是将这些成百上千套的MHA集群信息收集起来,便于查询和管理。 MHA主要信息如下: (1)基础配置信息; (2)运行状态信息; (3)启动及FailOver的log信息。 集团目前数据库的管理平台是在Archery的基础上打造,所以,需要将此功能嵌入到既有平台上…

    MySQL 2023年4月16日
    00
  • 连接Oracle数据库失败(ORA-12514)故障排除全过程

    连接Oracle数据库失败(ORA-12514)是数据库连接过程中常见的错误之一。本文将为大家详细讲解连接Oracle数据库失败(ORA-12514)的故障排除全过程,以帮助大家更好地解决该问题。 什么是连接Oracle数据库失败(ORA-12514)? 当我们尝试连接Oracle数据库时,可能会遇到连接失败的情况,同时系统也会报错,其中最常见的错误之一就是…

    database 2023年5月19日
    00
  • SpringBoot使用Redis缓存MySql的方法步骤

    当我们在使用Spring Boot开发Web应用时,通常会遇到需要缓存数据库查询结果的场景。在这种情况下,我们可以采用Redis作为缓存工具,以实现快速缓存和查询结果。下面是Spring Boot使用Redis缓存MySql的方法步骤的完整攻略: 1. 导入Redis和MySQL相关依赖 在Spring Boot项目中首先需要将Redis和MySQL相关依赖…

    database 2023年5月21日
    00
  • JDBC连接mysql乱码异常问题处理总结

    JDBC连接MySQL乱码异常问题处理总结 问题描述 在使用JDBC连接MySQL数据库时,可能会出现乱码的异常情况,如下所示: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect string value: ‘\xCE\xB1\xCE\xBC\xCF\x80…’ for colu…

    database 2023年5月21日
    00
  • 主键和外键的区别

    当设计数据库时,主键和外键是两个重要的概念。主键和外键都是用来建立表与表之间联系的,但是二者有着不同的作用。 什么是主键? 主键是一种用于唯一标识一条数据的字段或者字段组。在一个表中,每一条数据的主键值都是唯一的,通过主键可以快速地找到表中的一条记录,还可以通过主键对表中的数据进行操作。 主键有以下几个特点: 主键不能重复,也就是说主键值必须唯一。 非空,主…

    database 2023年3月27日
    00
  • 用一条mysql语句插入多条数据

    要使用一条MySQL语句一次性插入多条数据,可以使用INSERT INTO语句结合VALUES子句和多个数据值的列表,或者使用SELECT语句将多个数据行插入到表中。以下是两种不同的方法。 方法1:使用VALUES子句插入多个数据值 此方法将所有要插入的数据值列表放在一个VALUES子句中,如下所示: INSERT INTO table_name (colu…

    database 2023年5月22日
    00
  • C#操作redis代码汇总

    马上要用redis来改造现有的o2o项目了,在linux下部署了个redis,顺便研究了下代码操作,分享下代码 using System; using System.Collections.Generic; using ServiceStack.Redis; namespace SysBuild { class Program { //linux服务器地址 …

    Redis 2023年4月13日
    00
  • SQL 和 HiveQL的区别

    SQL和HiveQL都是用于查询数据库的语言,但它们在语法和使用方面有所不同。 SQL是一种关系型数据库管理系统(RDBMS)的查询语言,常用于Oracle, MySQL, MS SQL Server等常见数据库。它使用的是结构化查询语言,主要操作关系型数据库,包括增删改查等操作。 HiveQL是基于Hadoop的分布式计算框架Hive的查询语言,主要在大数…

    database 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部