资讯专栏INFORMATION COLUMN

EasyUI 数据表格datagrid列自适应内容宽度(不需重新加载表格)

FrozenMap / 1169人阅读

摘要:项目初期在加载数据表格的时候为了提高表格数据渲染速度,设置了默认宽度。现需求需要加一个表格自适应的功能,触发改功能,改变列宽度,但是不重新渲染表格,不发生数据请求。设计思路,遍历每项的所有数据,比较字节符串长度,取最大长度。

项目初期在加载数据表格的时候为了提高表格数据渲染速度,设置了默认宽度。
现需求需要加一个表格自适应的功能,触发改功能,改变列宽度,但是不重新渲染表格,不发生数据请求。

设计思路,遍历每项的所有数据,比较字节符串长度,取最大长度。再用最大长度和标题长度比较,如果标题长就去标题长度,如果字符串长,就取字符串的。
js

//表格自适应方法
function changeWidth(agstr){
    var dg = $("#"+agstr);
    dg.datagrid("loading");//显示加载状态$$$
    var fn=function(){
        var opts = dg.datagrid("getColumnFields");    //获取表头所有field
        var data=dg.datagrid("getData");//获取数据表格请求的数据
        var role = data.rows;//数据表格请求的数据,即每行的数据
            for (var i = 0; i ro_width){
                            ro_width = StringTolog(role[j][field]);//比较当前field列的每条数据长度,取最大值
                        }
                    }
                if(ro_width

调用以上两个方法就可以实现列宽自适应。
但是发现执行此方法之后,表头和表身的单元格宽度都已经固定写死,如果此时触发调整列宽大小事件,只能改变表头宽度,不会改变表身列宽,所以自适应列宽后可以取消改变列宽大小的功能
封装冻结列方法:

//冻结列,禁止调节列尺寸$("#id").datagrid("lockColumn",field值);
$.extend($.fn.datagrid.methods, {
    lockColumn: function(jq, field){
        return jq.each(function(){
            var p = $(this).datagrid("getPanel");    // 获取数据表格面板
            var cell = p.find("div.datagrid-header td[field=" + field + "] > div.datagrid-cell"); // 获取数据表格监听改变列宽事件的节点
            cell.resizable({disabled:true}); // 禁止改变列宽
        });
    }
});

在给每列设置宽度的时候调用该方法
dg.datagrid("lockColumn",field);
changeWidth 方法中的※※※位置

在重新定义列宽的时候如果数据量过大会导致页面卡顿,可以再触发该方法的开始位置调用datagrid的loading方法,结束时调用loaded方法,changeWidth 方法中的$$$位置

因为在触发表格自适应方法后调用了datagrid的冻结列方法,所以再重新查询数据的时候表头不会重新渲染,只有表身会,,表身就会恢复默认宽度,就会出现表头和表身对不齐的问题,表头也不能改变宽度。
解决办法,在数据表格数据加载成功时取消冻结列,清空之前计算的列宽

封装取消冻结列方法

//取消冻结列,允许调节列尺寸$("#id").datagrid("unlockColumn",field值);
$.extend($.fn.datagrid.methods, {
    unlockColumn: function(jq, field){
        return jq.each(function(){
            var p = $(this).datagrid("getPanel");    // 获取数据表格面板
            var cell = p.find("div.datagrid-header td[field=" + field + "] > div.datagrid-cell");  // 获取数据表格监听改变列宽事件的节点
            cell.resizable({disabled:false}); // 允许改变列宽
        });
    }
});

数据加载成功触发

onLoadSuccess: function (data) {
            var opts = $(this).datagrid("getColumnFields");    //获取表头所有field
             for(var i=0;i

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105755.html

相关文章

  • EasyUI datagrid数据表格单元格内允许换行 解决单元格内纯数字或英文文本不能换行问题

    摘要:官方的数据表格属性中提供了属性其作用是设置为,则把数据显示在一行里。设置为可提高加载性能。 官方的数据表格属性中提供了nowrap属性其作用是:设置为 true,则把数据显示在一行里。设置为 true 可提高加载性能。 默认为true在设置数据表格属性时将nowrap属性设置为false时,并且设置表格的宽度,当单元格内数据内容超过宽度时就会自动换行 { field : khm...

    junfeng777 评论0 收藏0
  • EasyUI datagrid问题整理

    摘要:什么是是一种基于和的用户界面插件集合。为创建现代化,互动,应用程序,提供必要的功能。是个完美支持网页的完整框架。很简单但功能强大的。返回则取消该动作。该函数有下列参数要传递到远程服务器的参数对象。当检索数据成功时调用的回调函数。 什么是easyUI easyui是一种基于jQuery、Angular.、Vue和React的用户界面插件集合。easyui为创建现代化,互动,JavaScr...

    Kross 评论0 收藏0
  • EasyUI datagrid问题整理

    摘要:什么是是一种基于和的用户界面插件集合。为创建现代化,互动,应用程序,提供必要的功能。是个完美支持网页的完整框架。很简单但功能强大的。返回则取消该动作。该函数有下列参数要传递到远程服务器的参数对象。当检索数据成功时调用的回调函数。 什么是easyUI easyui是一种基于jQuery、Angular.、Vue和React的用户界面插件集合。easyui为创建现代化,互动,JavaScr...

    megatron 评论0 收藏0
  • EasyUI datagrid问题整理

    摘要:什么是是一种基于和的用户界面插件集合。为创建现代化,互动,应用程序,提供必要的功能。是个完美支持网页的完整框架。很简单但功能强大的。返回则取消该动作。该函数有下列参数要传递到远程服务器的参数对象。当检索数据成功时调用的回调函数。 什么是easyUI easyui是一种基于jQuery、Angular.、Vue和React的用户界面插件集合。easyui为创建现代化,互动,JavaScr...

    yexiaobai 评论0 收藏0
  • 移动端实现表头固定,tbody滚动,三种方法

    摘要:实现表头固定,垂直滚动准备工作获取页面可是区域高度屏幕旋转触发事件正常方向或者屏幕旋转竖屏屏幕顺时针旋转或者逆时针旋转横屏方法一两个思路第一个放表头,第二个方内容。 实现表头固定,tbody垂直滚动准备工作: 获取页面可是区域高度 function setIframeHeight() { var screenHeight = document.documentElement.c...

    AlphaWallet 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<