這篇文章將為大家詳細(xì)講解有關(guān)EasyUI如何實(shí)現(xiàn)數(shù)據(jù)表格datagrid列自適應(yīng)內(nèi)容寬度,小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)公司專業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站制作(企業(yè)站、成都響應(yīng)式網(wǎng)站建設(shè)公司、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!項(xiàng)目初期在加載數(shù)據(jù)表格的時(shí)候?yàn)榱颂岣弑砀駭?shù)據(jù)渲染速度,設(shè)置了默認(rèn)寬度。
現(xiàn)需求需要加一個表格自適應(yīng)的功能,觸發(fā)改功能,改變列寬度,但是不重新渲染表格,不發(fā)生數(shù)據(jù)請求。
設(shè)計(jì)思路,遍歷每項(xiàng)的所有數(shù)據(jù),比較字節(jié)符串長度,取大長度。再用大長度和標(biāo)題長度比較,如果標(biāo)題長就去標(biāo)題長度,如果字符串長,就取字符串的。
js
//表格自適應(yīng)方法 function changeWidth(agstr){ var dg = $('#'+agstr); dg.datagrid("loading");//顯示加載狀態(tài)$$$ var fn=function(){ var opts = dg.datagrid('getColumnFields'); //獲取表頭所有field var data=dg.datagrid('getData');//獲取數(shù)據(jù)表格請求的數(shù)據(jù) var role = data.rows;//數(shù)據(jù)表格請求的數(shù)據(jù),即每行的數(shù)據(jù) for (var i = 0; iro_width){ ro_width = StringTolog(role[j][field]);//比較當(dāng)前field列的每條數(shù)據(jù)長度,取大值 } } if(ro_width 調(diào)用以上兩個方法就可以實(shí)現(xiàn)列寬自適應(yīng)。
但是發(fā)現(xiàn)執(zhí)行此方法之后,表頭和表身的單元格寬度都已經(jīng)固定寫死,如果此時(shí)觸發(fā)調(diào)整列寬大小事件,只能改變表頭寬度,不會改變表身列寬,所以自適應(yīng)列寬后可以取消改變列寬大小的功能
封裝凍結(jié)列方法:
//凍結(jié)列,禁止調(diào)節(jié)列尺寸$("#id").datagrid('lockColumn',field值); $.extend($.fn.datagrid.methods, { lockColumn: function(jq, field){ return jq.each(function(){ var p = $(this).datagrid('getPanel'); // 獲取數(shù)據(jù)表格面板 var cell = p.find('div.datagrid-header td[field=' + field + '] > div.datagrid-cell'); // 獲取數(shù)據(jù)表格監(jiān)聽改變列寬事件的節(jié)點(diǎn) cell.resizable({disabled:true}); // 禁止改變列寬 }); } });在給每列設(shè)置寬度的時(shí)候調(diào)用該方法
dg.datagrid('lockColumn',field);changeWidth 方法中的※※※位置
在重新定義列寬的時(shí)候如果數(shù)據(jù)量過大會導(dǎo)致頁面卡頓,可以再觸發(fā)該方法的開始位置調(diào)用datagrid的loading方法,結(jié)束時(shí)調(diào)用loaded方法,changeWidth 方法中的$$$位置
因?yàn)樵谟|發(fā)表格自適應(yīng)方法后調(diào)用了datagrid的凍結(jié)列方法,所以再重新查詢數(shù)據(jù)的時(shí)候表頭不會重新渲染,只有表身會,,表身就會恢復(fù)默認(rèn)寬度,就會出現(xiàn)表頭和表身對不齊的問題,表頭也不能改變寬度。
解決辦法,在數(shù)據(jù)表格數(shù)據(jù)加載成功時(shí)取消凍結(jié)列,清空之前計(jì)算的列寬
封裝取消凍結(jié)列方法
//取消凍結(jié)列,允許調(diào)節(jié)列尺寸$("#id").datagrid('unlockColumn',field值); $.extend($.fn.datagrid.methods, { unlockColumn: function(jq, field){ return jq.each(function(){ var p = $(this).datagrid('getPanel'); // 獲取數(shù)據(jù)表格面板 var cell = p.find('div.datagrid-header td[field=' + field + '] > div.datagrid-cell'); // 獲取數(shù)據(jù)表格監(jiān)聽改變列寬事件的節(jié)點(diǎn) cell.resizable({disabled:false}); // 允許改變列寬 }); } });數(shù)據(jù)加載成功觸發(fā)
onLoadSuccess: function (data) { var opts = $(this).datagrid('getColumnFields'); //獲取表頭所有field for(var i=0;i關(guān)于“EasyUI如何實(shí)現(xiàn)數(shù)據(jù)表格datagrid列自適應(yīng)內(nèi)容寬度”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁名稱:EasyUI如何實(shí)現(xiàn)數(shù)據(jù)表格datagrid列自適應(yīng)內(nèi)容寬度-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://weahome.cn/article/djigii.html