1. 程式人生 > >自定義列印easyui中datagrid資料框中的資料

自定義列印easyui中datagrid資料框中的資料

1.js中,自定義列印程式碼

/**
 * @Description  :自定義列印datagrid解決超過紙張寬度window.print()不能全顯問題
 *                  解決方法:將datagrid轉換成table嵌入到iframe進行列印
 * @author       : bjh
 * @param        : strPrintName 列印任務名, printDatagrid 要列印的datagrid
 * @return       : 
 * @exception    : 
 * @date         : 2018/11/15 20:34
 */
function CreateFormPage(strPrintName, printDatagrid) {
    var tableString = '<table cellspacing="0" class="pb" width="100%" border="1em">';
    // 得到frozenColumns物件
    var frozenColumns = printDatagrid.datagrid("options").frozenColumns;
    // 得到columns物件
    var columns = printDatagrid.datagrid("options").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) {
                tableString += rows[i][nl[j].f.substring(0, e)];
            }
            else{
                //此處有更改,設定成如果讀取欄位為null,設定自動填充0
                if(rows[i][nl[j].f] == null){
                    if(i != rows.length-1)
                        tableString += 0;
                }else {
                    tableString += rows[i][nl[j].f];
                }
            }
            tableString += '</td>';
        });
        tableString += '\n</tr>';
    }
    tableString += '\n</table>';
    // 生成並列印ifrme
    var f = document.getElementById('printf');
    f.contentDocument.write(tableString);
    f.contentDocument.title = strPrintName;
    f.contentDocument.close();
    f.contentWindow.print();
}

2.js中,函式的呼叫

CreateFormPage('xxxx表', $('#grid'));

3.列印頁面調出成功!