前言
应用系统有时候需要打印Datagrid的表格内容,我们本节就来学习打印datagrid内容
打印主要使用:web打印(我们之前有讲过web打印插件jqprint) + 将datagrid重新编制成可以打印的html格式
一、建立一个普通的例子
我们使用官方下载的demo下的datagrid basic.html代码就好
引入Jqgrid打印插件,并增加一个按钮来触发打印事件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Basic DataGrid - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script src="jquery.jqprint-0.3.js"></script>
</head>
<body>
<h2>Basic DataGrid</h2>
<p>The DataGrid is created from markup, no JavaScript code needed.</p>
<div id="modalwindow" class="easyui-window" style="width:800px; height:400px;" data-options="modal:true,closed:true,minimizable:false,shadow:false"></div>
<div style="margin:20px 0;"><a href="#" id="btnPrint" class="easyui-linkbutton" data-options="iconCls:\'icon-print\'" style="width:80px">Print</a></div>
<table id="List" class="easyui-datagrid" title="Basic DataGrid" style="width:700px;height:250px"
data-options="singleSelect:true,collapsible:true,method:\'get\'">
<thead>
<tr>
<th data-options="field:\'itemid\',width:80">Item ID</th>
<th data-options="field:\'productid\',width:100">Product</th>
<th data-options="field:\'listprice\',width:80,align:\'right\'">List Price</th>
<th data-options="field:\'unitcost\',width:80,align:\'right\'">Unit Cost</th>
<th data-options="field:\'attr1\',width:250">Attribute</th>
<th data-options="field:\'status\',width:60,align:\'center\'">Status</th>
</tr>
</thead>
</table>
<script type="text/javascript">
$(function () {
//由于本地无法直接读取json文件,所以将数据提取出来赋值
var obj = {
"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" }
]
}
;
//加载数据
$(\'#List\').datagrid(\'loadData\', obj);
});
</script>
</body>
</html>
二、将datagrid数据分解成HTML Table表格
function CreateFormPage(printDatagrid) { var tableString = \'<div class="mvctool bgb"><a onclick="$(\\'.dg-pb\\').jqprint();" class="btn btn-default"><span class="fa fa-print"></span> 打印</a></div><table cellspacing="0" class="dg-pb">\'; var frozenColumns = printDatagrid.datagrid("options").frozenColumns; // 得到frozenColumns对象 var columns = printDatagrid.datagrid("options").columns; // 得到columns对象 var nameList = \'\'; // 载入title if (typeof columns != \'undefined\' && columns != \'\') { $(columns).each(function (index) { tableString += \'\n<tr>\'; if (typeof frozenColumns != \'undefined\' && typeof frozenColumns[index] != \'undefined\') { for (var i = 0; i < frozenColumns[index].length; ++i) { if (!frozenColumns[index][i].hidden) { tableString += \'\n<th width="\' + frozenColumns[index][i].width + \'"\'; if (typeof frozenColumns[index][i].rowspan != \'undefined\' && frozenColumns[index][i].rowspan > 1) { tableString += \' rowspan="\' + frozenColumns[index][i].rowspan + \'"\'; } if (typeof frozenColumns[index][i].colspan != \'undefined\' && frozenColumns[index][i].colspan > 1) { tableString += \' colspan="\' + frozenColumns[index][i].colspan + \'"\'; } if (typeof frozenColumns[index][i].field != \'undefined\' && frozenColumns[index][i].field != \'\') { nameList += \',{"f":"\' + frozenColumns[index][i].field + \'", "a":"\' + frozenColumns[index][i].align + \'"}\'; } tableString += \'>\' + frozenColumns[0][i].title + \'</th>\'; } } } for (var i = 0; i < columns[index].length; ++i) { if (!columns[index][i].hidden) { tableString += \'\n<th width="\' + columns[index][i].width + \'"\'; if (typeof columns[index][i].rowspan != \'undefined\' && columns[index][i].rowspan > 1) { tableString += \' rowspan="\' + columns[index][i].rowspan + \'"\'; } if (typeof columns[index][i].colspan != \'undefined\' && columns[index][i].colspan > 1) { tableString += \' colspan="\' + columns[index][i].colspan + \'"\'; } if (typeof columns[index][i].field != \'undefined\' && columns[index][i].field != \'\') { nameList += \',{"f":"\' + columns[index][i].field + \'", "a":"\' + columns[index][i].align + \'"}\'; } tableString += \'>\' + columns[index][i].title + \'</th>\'; } } tableString += \'\n</tr>\'; }); } // 载入内容 var rows = printDatagrid.datagrid("getRows"); // 这段代码是获取当前页的所有行 var nl = eval(\'([\' + nameList.substring(1) + \'])\'); for (var i = 0; i < rows.length; ++i) { tableString += \'\n<tr>\'; $(nl).each(function (j) { var e = nl[j].f.lastIndexOf(\'_0\'); tableString += \'\n<td\'; if (nl[j].a != \'undefined\' && nl[j].a != \'\') { tableString += \' style="text-align:\' + nl[j].a + \';"\'; } tableString += \'>\'; if (e + 2 == nl[j].f.length) { if (rows[i][nl[j].f.substring(0, e)] != null) { tableString += rows[i][nl[j].f.substring(0, e)]; } else { tableString += ""; } } else { if (rows[i][nl[j].f] != null) { tableString += rows[i][nl[j].f]; } else { tableString += ""; } } tableString += \'</td>\'; }); tableString += \'\n</tr>\'; } tableString += \'\n</table>\'; return tableString; }
代码看起来有点复杂,但是不难看懂,提取datagrid的title和历遍数据得重新写入一个新的table
三、添加打印事件
$("#btnPrint").click(function () {
var tablestr = CreateFormPage($("#List"));
$("#modalwindow").html(tablestr);
$("#modalwindow").window({ title: "打印", width:500, height: 400, iconCls: \'fa fa-plus\' }).window(\'open\');
});
四、预览结果
总结:
不是很美观,那么加入一段CSS吧
/*datagrid print*/ .dg-pb{font-size:13px;border-collapse:collapse;} .dg-pb th{font-weight:bold;text-align:center;border:1px solid #333333;padding:2px;} .dg-pb td{border:1px solid #333333;padding:2px;}
再次在预览的结果点击打印调出打印机
本节完整代码下载
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Basic DataGrid - jQuery EasyUI Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <link rel="stylesheet" type="text/css" href="../demo.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script src="jquery.jqprint-0.3.js"></script> </head> <body> <style> /*datagrid print*/ .dg-pb{font-size:13px;border-collapse:collapse;} .dg-pb th{font-weight:bold;text-align:center;border:1px solid #333333;padding:2px;} .dg-pb td{border:1px solid #333333;padding:2px;} </style> <h2>Basic DataGrid</h2> <p>The DataGrid is created from markup, no JavaScript code needed.</p> <div id="modalwindow" class="easyui-window" style="width:800px; height:400px;" data-options="modal:true,closed:true,minimizable:false,shadow:false"></div> <div style="margin:20px 0;"><a href="#" id="btnPrint" class="easyui-linkbutton" data-options="iconCls:\'icon-print\'" style="width:80px">Print</a></div> <table id="List" class="easyui-datagrid" title="Basic DataGrid" style="width:700px;height:250px" data-options="singleSelect:true,collapsible:true,method:\'get\'"> <thead> <tr> <th data-options="field:\'itemid\',width:80">Item ID</th> <th data-options="field:\'productid\',width:100">Product</th> <th data-options="field:\'listprice\',width:80,align:\'right\'">List Price</th> <th data-options="field:\'unitcost\',width:80,align:\'right\'">Unit Cost</th> <th data-options="field:\'attr1\',width:250">Attribute</th> <th data-options="field:\'status\',width:60,align:\'center\'">Status</th> </tr> </thead> </table> <script type="text/javascript"> $(function () { var obj = { "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" } ] } ; $(\'#List\').datagrid(\'loadData\', obj); $("#btnPrint").click(function () { var tablestr = CreateFormPage($("#List")); $("#modalwindow").html(tablestr); $("#modalwindow").window({ title: "打印", width:700, height: 400, iconCls: \'fa fa-plus\' }).window(\'open\'); }); }); function CreateFormPage(printDatagrid) { var tableString = \'<div class="mvctool bgb"> <a href="#" id="btnPrint" class="easyui-linkbutton" data-options="iconCls:\\'icon-print\\'" style="width:80px" onclick="$(\\'.dg-pb\\').jqprint();">打印</a></div><table cellspacing="0" class="dg-pb">\'; var frozenColumns = printDatagrid.datagrid("options").frozenColumns; // 得到frozenColumns对象 var columns = printDatagrid.datagrid("options").columns; // 得到columns对象 var nameList = \'\'; // 载入title if (typeof columns != \'undefined\' && columns != \'\') { $(columns).each(function (index) { tableString += \'\n<tr>\'; if (typeof frozenColumns != \'undefined\' && typeof frozenColumns[index] != \'undefined\') { for (var i = 0; i < frozenColumns[index].length; ++i) { if (!frozenColumns[index][i].hidden) { tableString += \'\n<th width="\' + frozenColumns[index][i].width + \'"\'; if (typeof frozenColumns[index][i].rowspan != \'undefined\' && frozenColumns[index][i].rowspan > 1) { tableString += \' rowspan="\' + frozenColumns[index][i].rowspan + \'"\'; } if (typeof frozenColumns[index][i].colspan != \'undefined\' && frozenColumns[index][i].colspan > 1) { tableString += \' colspan="\' + frozenColumns[index][i].colspan + \'"\'; } if (typeof frozenColumns[index][i].field != \'undefined\' && frozenColumns[index][i].field != \'\') { nameList += \',{"f":"\' + frozenColumns[index][i].field + \'", "a":"\' + frozenColumns[index][i].align + \'"}\'; } tableString += \'>\' + frozenColumns[0][i].title + \'</th>\'; } } } for (var i = 0; i < columns[index].length; ++i) { if (!columns[index][i].hidden) { tableString += \'\n<th width="\' + columns[index][i].width + \'"\'; if (typeof columns[index][i].rowspan != \'undefined\' && columns[index][i].rowspan > 1) { tableString += \' rowspan="\' + columns[index][i].rowspan + \'"\'; } if (typeof columns[index][i].colspan != \'undefined\' && columns[index][i].colspan > 1) { tableString += \' colspan="\' + columns[index][i].colspan + \'"\'; } if (typeof columns[index][i].field != \'undefined\' && columns[index][i].field != \'\') { nameList += \',{"f":"\' + columns[index][i].field + \'", "a":"\' + columns[index][i].align + \'"}\'; } tableString += \'>\' + columns[index][i].title + \'</th>\'; } } tableString += \'\n</tr>\'; }); } // 载入内容 var rows = printDatagrid.datagrid("getRows"); // 这段代码是获取当前页的所有行 var nl = eval(\'([\' + nameList.substring(1) + \'])\'); for (var i = 0; i < rows.length; ++i) { tableString += \'\n<tr>\'; $(nl).each(function (j) { var e = nl[j].f.lastIndexOf(\'_0\'); tableString += \'\n<td\'; if (nl[j].a != \'undefined\' && nl[j].a != \'\') { tableString += \' style="text-align:\' + nl[j].a + \';"\'; } tableString += \'>\'; if (e + 2 == nl[j].f.length) { if (rows[i][nl[j].f.substring(0, e)] != null) { tableString += rows[i][nl[j].f.substring(0, e)]; } else { tableString += ""; } } else { if (rows[i][nl[j].f] != null) { tableString += rows[i][nl[j].f]; } else { tableString += ""; } } tableString += \'</td>\'; }); tableString += \'\n</tr>\'; } tableString += \'\n</table>\'; return tableString; } </script> </body> </html>