欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

EasyUI如何實(shí)現(xiàn)數(shù)據(jù)表格datagrid列自適應(yīng)內(nèi)容寬度

這篇文章將為大家詳細(xì)講解有關(guān)EasyUI如何實(shí)現(xiàn)數(shù)據(jù)表格datagrid列自適應(yīng)內(nèi)容寬度,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

海晏網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),海晏網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為海晏成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的海晏做網(wǎng)站的公司定做!

項(xiàng)目初期在加載數(shù)據(jù)表格的時(shí)候?yàn)榱颂岣弑砀駭?shù)據(jù)渲染速度,設(shè)置了默認(rèn)寬度。

現(xiàn)需求需要加一個(gè)表格自適應(yīng)的功能,觸發(fā)改功能,改變列寬度,但是不重新渲染表格,不發(fā)生數(shù)據(jù)請(qǐng)求。

設(shè)計(jì)思路,遍歷每項(xiàng)的所有數(shù)據(jù),比較字節(jié)符串長(zhǎng)度,取最大長(zhǎng)度。再用最大長(zhǎng)度和標(biāo)題長(zhǎng)度比較,如果標(biāo)題長(zhǎng)就去標(biāo)題長(zhǎng)度,如果字符串長(zhǎng),就取字符串的。

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ù)表格請(qǐng)求的數(shù)據(jù)
    var role = data.rows;//數(shù)據(jù)表格請(qǐng)求的數(shù)據(jù),即每行的數(shù)據(jù)
      for (var i = 0; i <opts.length ;i++) { //循環(huán)每一列的數(shù)據(jù)內(nèi)容
        var field=opts[i];
        var ro_width = 0;
        if(field != ''){
          var col = dg.datagrid('getColumnOption', field);
          var col_title = col.title;
          for(j=0;j<role.length;j++){
            if(StringTolog(role[j][field])>ro_width){
              ro_width = StringTolog(role[j][field]);//比較當(dāng)前field列的每條數(shù)據(jù)長(zhǎng)度,取最大值
            }
          }
        if(ro_width<StringTolog(col_title)){//如果當(dāng)前列數(shù)據(jù)長(zhǎng)度小于當(dāng)前列表頭長(zhǎng)度則取表頭長(zhǎng)度
          ro_width =StringTolog(col_title);
        }
    
        var ro_length=ro_width*14+10;//14是頁(yè)面字體像素大小 10是單元格左右內(nèi)邊距大小
        $("td[field='"+field+"'] div").width(ro_length);//設(shè)置列寬樣式
        dg.datagrid('lockColumn',field);//禁止數(shù)據(jù)表格改變列寬※※※
      }
    }  
    dg.datagrid("loaded");//隱藏加載狀態(tài)$$$
  }
  setTimeout(fn,0);
}

//字符串的粗略換算
function StringTolog(Str){
  if(Str==null){
    return 0;
  }
  Str = Str.toString();//該方法將取到的數(shù)據(jù)轉(zhuǎn)為String類型
  Str = Str.replace(/\s+/g,'');//替換空格
  //兩個(gè)字節(jié)為長(zhǎng)度1,一個(gè)字節(jié)為長(zhǎng)度0.5,計(jì)算字符串總長(zhǎng)度
  var newStr = (Str.length-Str.replace(/[\x00-\xff]+/g,'').length)/2
          +Str.replace(/[\x00-\xff]+/g,'').length;
  return newStr;
}

調(diào)用以上兩個(gè)方法就可以實(shí)現(xiàn)列寬自適應(yīng)。

但是發(fā)現(xiàn)執(zhí)行此方法之后,表頭和表身的單元格寬度都已經(jīng)固定寫(xiě)死,如果此時(shí)觸發(fā)調(diào)整列寬大小事件,只能改變表頭寬度,不會(huì)改變表身列寬,所以自適應(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)聽(tīng)改變列寬事件的節(jié)點(diǎn)
      cell.resizable({disabled:true}); // 禁止改變列寬
    });
  }
});

在給每列設(shè)置寬度的時(shí)候調(diào)用該方法

dg.datagrid('lockColumn',field);

changeWidth 方法中的※※※位置

在重新定義列寬的時(shí)候如果數(shù)據(jù)量過(guò)大會(huì)導(dǎo)致頁(yè)面卡頓,可以再觸發(fā)該方法的開(kāi)始位置調(diào)用datagrid的loading方法,結(jié)束時(shí)調(diào)用loaded方法,changeWidth 方法中的$$$位置

EasyUI如何實(shí)現(xiàn)數(shù)據(jù)表格datagrid列自適應(yīng)內(nèi)容寬度

因?yàn)樵谟|發(fā)表格自適應(yīng)方法后調(diào)用了datagrid的凍結(jié)列方法,所以再重新查詢數(shù)據(jù)的時(shí)候表頭不會(huì)重新渲染,只有表身會(huì),,表身就會(huì)恢復(fù)默認(rèn)寬度,就會(huì)出現(xiàn)表頭和表身對(duì)不齊的問(wèn)題,表頭也不能改變寬度。

解決辦法,在數(shù)據(jù)表格數(shù)據(jù)加載成功時(shí)取消凍結(jié)列,清空之前計(jì)算的列寬

EasyUI如何實(shí)現(xiàn)數(shù)據(jù)表格datagrid列自適應(yīng)內(nèi)容寬度

封裝取消凍結(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)聽(tīng)改變列寬事件的節(jié)點(diǎn)
      cell.resizable({disabled:false}); // 允許改變列寬
    });
  }
});

數(shù)據(jù)加載成功觸發(fā)

onLoadSuccess: function (data) {
      var opts = $(this).datagrid('getColumnFields');  //獲取表頭所有field
       for(var i=0;i<opts.length;i++){
         $(this).datagrid('unlockColumn',opts[i]);//允許調(diào)整列尺寸
         $("tr.datagrid-header-row td[field='"+opts[i]+"'] div").width('');//清空表格自適應(yīng)時(shí)計(jì)算的表頭寬度
       }
    },

EasyUI如何實(shí)現(xiàn)數(shù)據(jù)表格datagrid列自適應(yīng)內(nèi)容寬度

關(guān)于“EasyUI如何實(shí)現(xiàn)數(shù)據(jù)表格datagrid列自適應(yīng)內(nèi)容寬度”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

本文題目:EasyUI如何實(shí)現(xiàn)數(shù)據(jù)表格datagrid列自適應(yīng)內(nèi)容寬度
瀏覽地址:http://www.chinadenli.net/article24/iiehje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃域名注冊(cè)標(biāo)簽優(yōu)化定制開(kāi)發(fā)外貿(mào)網(wǎng)站建設(shè)網(wǎng)站營(yíng)銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)