#对easyui datagrid组件的一个小改进
##问题
在实际项目中使用datagrid时,受版面限制,有时候表格不能太大,这时候表格里面的内容就不能完全显示,用户需要经常拖动调整列宽才能看完整

##规划与思考
一览datagrid的API,有几点值得思考
* `fitColumns`属性,**True to auto expand/contract the size of the columns to fit the grid width and prevent horizontal scrolling** ,这个属性是在datagrid本身的宽度足够的情况下才好用。
* `nowrap`属性,**True to display data in one line**,这个属性是在datagrid本身的高度足够的情况下才好用。
* `onAfterRender`事件,**Fires after the view is rendered**这个事件可以在表格渲染完成后再处理一些事情,再结合HTML中的`title` 属性,可以用来进行鼠标提示的设置。
##代码的编写
确定方向是鼠标提示,可是提示放在哪里呢,这里就需要分析datagrid渲染完成后的HTML了

可以看到表格的内容是在类名为`datagrid-cell`的div元素里面的,所以要写代码在这里增加title属性
刚开始的时候,我是直接修改`onAfterRender `事件的
```javascript
$.fn.datagrid.defaults.view.onAfterRender = function(tgt){
$(tgt).datagrid("getPanel").find("div.datagrid-body").find("div.datagrid-cell").each(function(){
var $Obj = $(this)
$Obj.attr("title",$Obj.text());
})
}
```
后来发现对于有些已经有onAfterRender 事件的datagrid,会覆盖其原来的事件,所以经过一些代码细节的调整,变成这样
```javascript
var oriFunc = $.fn.datagrid.defaults.view.onAfterRender;
$.fn.datagrid.defaults.view.onAfterRender = function(tgt){
oriFunc(tgt);
$(tgt).datagrid("getPanel").find("div.datagrid-body").find("div.datagrid-cell").each(function(){
var $Obj = $(this)
$Obj.attr("title",$Obj.text());
})
}
```
##解决效果

这也算是用户体验的一点提高
##完整的示例及代码
[DEMO](http://p2227.github.io/demo/datagrid/)
[代码(项目常用jquery/easyui函数小结)](http://www.cnblogs.com/p2227/p/3541143.html)
对easyui datagrid组件的一个小改进
问题
在实际项目中使用datagrid时,受版面限制,有时候表格不能太大,这时候表格里面的内容就不能完全显示,用户需要经常拖动调整列宽才能看完整

规划与思考
一览datagrid的API,有几点值得思考
fitColumns
属性,True to auto expand/contract the size of the columns to fit the grid width and prevent horizontal scrolling ,这个属性是在datagrid本身的宽度足够的情况下才好用。
nowrap
属性,True to display data in one line,这个属性是在datagrid本身的高度足够的情况下才好用。
onAfterRender
事件,Fires after the view is rendered这个事件可以在表格渲染完成后再处理一些事情,再结合HTML中的title
属性,可以用来进行鼠标提示的设置。
代码的编写
确定方向是鼠标提示,可是提示放在哪里呢,这里就需要分析datagrid渲染完成后的HTML了

可以看到表格的内容是在类名为datagrid-cell
的div元素里面的,所以要写代码在这里增加title属性
刚开始的时候,我是直接修改onAfterRender
事件的
$.fn.datagrid.defaults.view.onAfterRender = function(tgt){
$(tgt).datagrid("getPanel").find("div.datagrid-body").find("div.datagrid-cell").each(function(){
var $Obj = $(this)
$Obj.attr("title",$Obj.text());
})
}
后来发现对于有些已经有onAfterRender 事件的datagrid,会覆盖其原来的事件,所以经过一些代码细节的调整,变成这样
var oriFunc = $.fn.datagrid.defaults.view.onAfterRender;
$.fn.datagrid.defaults.view.onAfterRender = function(tgt){
oriFunc(tgt);
$(tgt).datagrid("getPanel").find("div.datagrid-body").find("div.datagrid-cell").each(function(){
var $Obj = $(this)
$Obj.attr("title",$Obj.text());
})
}
解决效果
这也算是用户体验的一点提高
完整的示例及代码
DEMO
代码(项目常用jquery/easyui函数小结)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库