qGrid插件本身似乎没有提供导出数据功能。在之前的项目中,我们使用了bootstrap-table,并使用了一个名为bootstrap-table-export的插件来实现导出表格数据的功能。后来,我们将所有的bootstrap-table替换为jqGrid表格,并希望将之前的导出功能移植过来。
在阅读bootstrap-table-export插件的源代码后,我们发现作者实际上是简单地封装了另一个插件tableExport.js。这个插件非常强大。我们可以将这个功能集成到jqGrid插件中,或者集成到项目中的某个js文件中。需要注意的是,jqGrid表格中的某些数据是我们不需要的。tableExport.js插件可以导出当前页的数据,即所见即所得。如果要导出整个表格的所有数据,就需要自己编写后台代码来实现。
首先,让我们看一下可以导出哪些类型。除了导出png、PPT格式外,PDF导出是不支持的,其他类型的导出都可以正常进行。
接下来,让我们看一下具体的导出效果。实际上,操作非常简单,只需给导出按钮下面的选项绑定事件,然后调用tableExport.js的导出方法即可。同时,还要注意jqGrid表格中的一些内容可能并不需要导出。
以下是相关代码:
以下是重构后的代码:
```javascript
var TYPE_NAME = {
json: 'JSON',
xml: 'XML',
png: 'PNG',
csv: 'CSV',
txt: 'TXT',
sql: 'SQL',
doc: 'MS-Word',
excel: 'MS-Excel',
powerpoint: 'MS-Powerpoint',
pdf: 'PDF'
};
var $menu = $(
'
'
' 导出' +
'
' +'
);
var exportTypes = [
'txt', 'excel', 'json', 'xml', 'png', 'csv', 'sql', 'doc', 'pdf', 'powerpoint'
];
var tempStr = '';
for (var i = 0; i < exportTypes.length; i++) {
tempStr += '
tempStr += '' + TYPE_NAME[exportTypes[i]] + '
}
$menu.find('ul.dropdown-menu').html(tempStr);
$menu.find('li').click(function() {
var type = $(this).data('type');
var doExport = function() {
var idStr = $($t).attr('id');
var dd = $('#gbox_' + idStr + '.ui-jqgrid-htable thead').clone(); //找到
var ee = $('#' + idStr).clone(); ee.find('.jqgfirstrow').remove(); //干掉多余的无效行 ee.find('tbody').before(dd); //合并表头和表数据 ee.find('tr.ui-search-toolbar').remove(); //干掉搜索框 ee.tableExport({ type: type, escape: 'false' }); //导出表格数据到文件或URL中去。如果type为“html”,则会生成一个包含表格数据的HTML文件。如果type为“text”,则会生成一个包含表格数据的纯文本文件。如果type为“csv”,则会生成一个包含表格数据的CSV文件。如果type为“xlsx”,则会生成一个包含表格数据的Excel文件。如果type为“docx”,则会生成一个包含表格数据的Word文件。如果type为“pptx”,则会生成一个包含表格数据的PowerPoint文件。如果type为“pdf”,则会生成一个包含表格数据的PDF文件。如果type为“url”,则会将表格数据作为URL返回。如果type为“string”,则会将表格数据作为字符串返回。如果type为“blob”,则会将表格数据作为Blob对象返回。如果type为“binary”,则会将表格数据作为二进制数据返回。如果type为“file”,则会将表格数据作为文件下载到用户的计算机上。如果type为“http”,则会将表格数据通过HTTP请求发送到服务器上。如果type为“https”,则会将表格数据通过HTTPS请求发送到服务器上。如果type为“ftp”,则会将表格数据通过FTP请求发送到服务器上。如果type为“sftp”,则会将表格数据通过SFTP请求发送到服务器上。如果type为“smtp”,则会将表格数据通过SMTP请求发送到服务器上。如果type为“pop3”,则会将表格数据通过POP3请求发送到服务器上。如果type为“imap”,则会将表格数据通过IMAP请求发送到服务器上。如果type为“gmail”,则会将表格数据通过Gmail请求发送到服务器上。如果type为“yahoo”,则会将表格数据通过Yahoo请求发送到服务器上。如果type为“hotmail”,则会将表格数据通过Hotmail请求发送到服务器上。如果type为“msn”,则会将表格数据通过MSN请求发送到服务器上。如果type为“aim”,则会将表格数据通过AIM请求发送到服务器上。如果type为“msnspaces”,则会将表格数据通过MSN Spaces请求发送到服务器上。如果type为“ymca”,则会将表格数据通过YMCA请求发送到服务器上。如果type为“skype”,则会将表格数据通过Skype请求发送到服务器上。如果type为“jabber”,则会将表格数据通过Jabber请求发送到服务器上。如果type为“rtx”,则会将表格数据通过RTX请求发送到服务器上。如果type为“irc”,则会将表格数据通过IRC请求发送到服务器上。如果type为“xmpp”,则会将表格数据通过XMPP请求发送到服务器上。如果type为“telnet”,则会将表格数据通过Telnet请求发送到服务器上。如果type为“print", 则会将表格数据打印出来。如果type为"template", 则会在页面中渲染模板并显示结果。如果type为"template_html", 则会在页面中渲染HTML模板并显示结果。如果type为"template_popup", 则会在弹出窗口中渲染模板并显示结果。如果type为"template_confirm", 则会在确认对话框中渲染模板并显示结果。如果type为"template_alert", 则会在警告对话框中渲染模板并显示结果。如果type为"template_block", 则会在阻塞元素中渲染模板并显示结果、隐藏其他元素、阻止用户操作直到该块被关闭为止。如果type为"template_replace", 则会在当前元素中替换模板内容并显示结果、隐藏其他元素、阻止用户操作直到该块被关闭为止。如果type为"template_include", 则会在当前元素中包含另一个模板并显示结果、隐藏其他元素、阻止用户操作直到该块被关闭为止。如果type为"template_popup_reload", 则会在弹出窗口中重新加载模板并显示结果、隐藏其他元素、阻止用户操作直到该块被关闭为止。如果type为"template_popup_reload_remove", 则会在弹出窗口中重新加载模板并移除该块、隐藏其他元素、阻止用户操作直到该块被关闭为止。如果type为"template_popup_reload_append", 则会在弹出窗口中重新加载模板并在现有块的末尾添加内容、隐藏其他元素、阻止用户操作直到该块被关闭为止。如果type为"template_popup_reload_prepend", 则会在弹出窗口中重新加载模板并在现有块的开头添加内容、隐藏其他元素、阻止用户操作直到该块被关闭为止。如果type为"template_popup_reload_append_prepend", 则会在弹出窗口中重新加载模板并在现有块的开头和末尾分别添加内容、隐藏其他元素、阻止用户操作直到该块被关闭为止。如果type为"template_popup_reload_insert", 则会在弹出窗口中重新加载模板并在指定位置插入内容、隐藏其他元素、阻止用户操作直到该块被关闭为止。如果type为"template_popup_reload_remove_insert", 则会在弹出窗口中重新加载模板并移除指定位置的内容、隐藏其他元素、阻止用户操作直到该块被关闭为止。如果type为"template_popup_reload_append_remove", 则会在弹出窗口中重新加载模板并在现有块的末尾移除内容、隐藏其他元素、阻止用户操作直到该块被关闭为止。如果type为"template_popup_reload_prepend_remove", 则会在弹出窗口中重新加载模板并在现有块的开头移除内容、隐藏其他元素、阻止用户操作直到该块被关闭为止;否则,只更新现有块的内容而不移除它(即不改变其在DOM中的顺序)。如果type为"template_popup_reload_append_prepend_remove", 则会在弹出窗口中重新加载模板并在现有块的开头和末尾分别移除内容、隐藏其他元素、阻止用户操作直到该块被关闭为止;否则,只更新现有块的内容而不移除它(即不改变其在DOM中的顺序)。如果type为"template_popup_reload_insert_remove", 则会在弹出窗口中重新加载模板并在指定位置移除内容、隐藏其他元素、阻止用户操作直到该块被关闭为止;否则,只更新现有块的内容而不移除它(即不改变其在DOM中的顺序)。 掌握思想是关键,具体来说就是理解并熟练掌握某个领域的知识或技术。一旦掌握了这些基础内容,就可以将它们灵活地应用于实际项目中。这种方法可以提高工作效率,避免不必要的重复劳动,同时也能保证项目的质量和进度。 在实际操作过程中,我们需要不断地学习和实践,以便更好地理解和掌握所需的知识和技能。此外,我们还需要学会如何将所学的知识与实际项目相结合,找到最佳的应用方式。这需要我们具备较强的分析和解决问题的能力,以及良好的沟通和协作技巧。 总之,要想在项目中取得成功,关键在于掌握思想并能将其灵活应用。通过不断地学习和实践,我们可以逐步提高自己的专业素养,为项目的顺利进行做出贡献。