easyui datagrid 没数据时显示滚动条的解决方法

本文介绍了解决EasyUI Datagrid在没有数据时无法通过滚动条查看后面列的问题,通过生成数据行并控制div宽度实现既不影响显示数据也不影响Pagination的正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天解决了一个bug,因为datagrid有多列,可是当没有数据的时候,后面的列无法通过滚动条拉动来显示,比较麻烦,而需求要求没有数据也要拉动滚动条查看后面有什么列,一开始在网上找了一些资料,发现都不可以,有一个实现生成空的table,也就是数据行,然后将其隐藏。


后来查看了一下,easyui datagrid中显示数据的区域是一个div,没有数据的时候没有滚动条,当时想找一些当div中内容为空,用js生成滚动条,并且控制滚动条的长短,都找不到。


使用生成数据行,然后隐藏的方式会导致没有数据的时候,其pagination也会显示有一条数据,而且当有数据的时候,数据不显示了,后来想到一种方法,获取其总的标题列的宽度(标题列是<td>标签,外层是<tr>标签,也就是<tr>标签的宽度),然后在显示数据的div中加入一个div,让其宽度与其总的标题列的宽度一样,然后然div的border为0px,也就是不显示出来(或者可以隐藏),就有滚动条,也不会导致有数据时无法显示数据,没数据的时候pagination不会显示有一条数据。


以jquery-easyui-1.3.3\demo\datagrid中的aligncolumns.html为例:

<table class="easyui-datagrid" title="Aligning Columns in DataGrid" style="width:700px;height:250px"
data-options="singleSelect:true,collapsible:true,url:'../datagrid/datagrid_data1.json'">这里width为700的时候显示如下图,

把 width改为500,显示如下图:


使用下面的代码

var dv2 = $(".datagrid-view2");
dv2.children(".datagrid-body").html("<div style='width:"+$(".datagrid-header-row").width()+"px;border:solid 1px;height:1px;'></div>");

结果如下图

dv2.children(".datagrid-body").html("<div style='width:"+$(".datagrid-header-row").width()+"px;border:solid 1px;height:1px;'></div>");

改为 

dv2.children(".datagrid-body").html("<div style='width:"+$(".datagrid-header-row").width()+"px;border:solid 0px;height:1px;'></div>");

结果如下图




### 如何在 EasyUI DataGrid 中正确添加垂直和水平滚动条 为了实现在 EasyUI DataGrid 中正确添加垂直和水平滚动条的功能,可以通过调整 `datagrid` 的属性以及绑定事件来完成。以下是具体实现方式: #### 垂直滚动条的设置 当数据量较大EasyUI DataGrid 默认会自动显示垂直滚动条。然而,如果需要手动控制其行为或者确保表头固定,可以使用以下配置项[^1]: - 设置 `rownumbers: true` 和 `fitColumns: false` 来启用行号并禁用列宽自适应。 - 使用 `pagination: true` 启用分页功能,从而减少单次加载的数据量。 代码示例如下: ```javascript $("#datagridId").datagrid({ rownumbers: true, fitColumns: false, pagination: true, pageSize: 1000, // 每页显示1000行 pageList: [1000], // 只允许选择每页1000行 }); ``` #### 水平滚动条的设置 对于水平滚动条的支持,则需注意以下几个方面[^2]: - 如果表格中的某些列宽度超出容器范围,水平滚动条将会自然显现。 - 需要确保 `singleSelect: true` 或其他选项不会干扰布局计算。 - 动态调整窗口大小,可通过监听窗口变化事件重新设定 DataGrid 宽高。 动态调整逻辑可参考如下代码片段: ```javascript $(window).resize(function() { $("#datagridId").datagrid("resize", { height: $(window).height(), width: $(window).width() }); }); ``` #### 组合应用与优化体验 有用户希望即使翻页后仍保持当前视图状态不变,比如保留滚动条的位置。此可以在 `onLoadSuccess` 方法里加入额外处理逻辑[^3]^: ```javascript onLoadSuccess: function(data) { var grid = this; setTimeout(function(){ $(grid).datagrid('scrollTo', 0); }, 0); // 进一步操作以防止页面跳动 $(this).datagrid("selectRow", 0); $(this).datagrid("unselectRow", 0); } ``` 上述方法能够有效解决因刷新引起的滚动丢失问题,并提升用户体验的一致性和流畅度。 ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值