EasyUI DataGrid 修改每頁顯示數量的最大值&&導出Grid到Excel


         首先,最近在搞那個DataGrid的導出,發現,網上的用JS導出到本地的方法雖然可用,但是只能導出DataGrid當前的數據,例如說,DataGrid默認是最大顯示50行,但是如果有多頁,那么就無法顯示全部了,那么就是只能導出前面前50行了,如果需要導出全部,只能后台導出了。今天我就想了個法子,能否直接前台顯示多條記錄,甚至1W條呢。我被我這個想法嚇到了,O(∩_∩)O哈哈~
         我先把網上的方法公布一下,網上前端導出Excel的方法是這樣的(其實也是用到了后台導出)。。。
         JS代碼(實際應用中,我寫到了js文件里面來使用,到時候記得引用就行):
         
function ChangeToTable(printDatagrid) {
    var tableString = '<table cellspacing="0" class="pb">';
    var frozenColumns = printDatagrid.datagrid("options").frozenColumns;  // 得到frozenColumns對象
    var columns = printDatagrid.datagrid("options").columns;    // 得到columns對象
    var nameList = new Array();
    // 載入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.push(frozenColumns[index][i]);
                        }
                        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.push(columns[index][i]);
                    }
                    tableString += '>' + columns[index][i].title + '</th>';
                }
            }
            tableString += '\n</tr>';
        });
    }
    // 載入內容
    var rows = printDatagrid.datagrid("getRows"); // 這段代碼是獲取當前頁的所有行
    for (var i = 0; i < rows.length; ++i) {
        tableString += '\n<tr>';
        for (var j = 0; j < nameList.length; ++j) {
            var e = nameList[j].field.lastIndexOf('_0');
            tableString += '\n<td';
            if (nameList[j].align != 'undefined' && nameList[j].align != '') {
                tableString += ' style="text-align:' + nameList[j].align + ';"';
            }
            tableString += '>';
            if (e + 2 == nameList[j].field.length) {
                tableString += rows[i][nameList[j].field.substring(0, e)];
            }
            else
                tableString += rows[i][nameList[j].field];
            tableString += '</td>';
        }
        tableString += '\n</tr>';
    }
    tableString += '\n</table>';
    return tableString;
}
function Export(strXlsName, exportGrid) {
    var f = $('<form action="/export.aspx" method="post" id="fm1"></form>');
    var i = $('<input type="hidden" id="txtContent" name="txtContent" />');
    var l = $('<input type="hidden" id="txtName" name="txtName" />');
    i.val(ChangeToTable(exportGrid));
    i.appendTo(f);
    l.val(strXlsName);
    l.appendTo(f);
    f.appendTo(document.body).submit();
    document.body.removeChild(f);
} 

         如果細心看  的人會看到,js代碼最后,引用到了export.aspx這個文件,對了,主要導出還是需要它滴~現在上他的代碼(從js中可看得出,這個export.aspx的位置應該放在根目錄哈,別放錯了)
         export.aspx前端代碼:
          <% @ Page Language="C#" AutoEventWireup="true" CodeBehind="export.aspx.cs" Inherits="YDS9000.export"  ValidateRequest="false"  %>//注意:后面這個 ValidateRequest ="false"需要手動添加
    export.aspx后台代碼:
         protected   void  Page_Load( object  sender,  EventArgs  e)
        {
            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "utf-8";
            Response.ContentEncoding = System.Text.Encoding.UTF8;//表格內容添加編碼格式 
            Response.HeaderEncoding = System.Text.Encoding.UTF8;//表頭添加編碼格式 
            Response.AppendHeader("content-disposition""attachment;filename=\"" + HttpUtility.HtmlEncode(Request["txtName"] ?? DateTime.Now.ToString("yyyyMMdd")) + ".xls\"");
            Response.ContentType = "Application/ms-excel";
            Response.Write("<html>\n<head>\n");
            Response.Write("<style type=\"text/css\">\n.pb{font-size:13px;border-collapse:collapse;} " +
                           "\n.pb th{font-weight:bold;text-align:center;border:0.5pt solid windowtext;padding:2px;} " +
                           "\n.pb td{border:0.5pt solid windowtext;padding:2px;}\n</style>\n</head>\n");
            Response.Write("<body>\n" + Request["txtContent"] + "\n</body>\n</html>");
            Response.Flush();
            Response.End(); 
        }
    那么實際使用中怎么用呢。打個比方,現在我們在一個有EasyUIDataGrid的頁面,需要把數據導出,那么假設DataGrid的id為tt,那么使用方法是:
 <a id="fileSave" href="#" class="easyui-linkbutton" style="margin-top: -30px; width: 65px;" onclick="Export('報表名稱', $('#tt'))">保存報表</a>  
    就這么簡單,對了,頁面記得引用 < script src ="/js/export.js"  type ="text/javascript"></ script >
     完成上述的操作,發現在真正使用中,還是會報錯,類似有危險代碼之類的,所以,我們仍需在Web.config中修改一些參數,如下:
    位置:
  < system.web >
    <httpRuntime requestValidationMode="2.0" />
  </system.web>
    好了,現在可以正常使用了
    我們接下來就回到,如何修改PageSize了。。。
         然后我就嘗試修改PageSize,發現,大於50的時候,就直接不顯示了。。。
         最后,我想起來,直接修改EasyUI的JS的庫,后來,居然成功了。好了,步驟如下。

         VS中,全局搜索:
         
      得出:

四條記錄,那么我們就一個一個改,改成如下,

把四個都改成,保存,再重新生成,再刷新頁面(如果有必要,可以清理緩存)。
我們再看看,哈哈,發現了沒,多了100和200啦。以此類推,你可以搞個10000的也行。




好了,教程到此結束,如有疑問,請評論文章或者私信,我看到會回復你的。
                     此文由南宮蕭塵整理首次發布在博客園,如需轉載,請保留此行。博客地址: http://www.cnblogs.com/nangong/






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM