最近项目中使用easyui做前端界面,相信大部分使用过easyui datagrid的朋友有这么一个疑问:如果在columns中不设置width属性能不能写个方法让datagrid的头部标题和数据主体自适应呢?如: columns: [[{ field: 'testName', title: '测试名', align: 'center' },{ field: 'testValue', title: '测试值', align: 'center' }]],如果按照上面这样设置列而不做其他处理的话。绑定出来的数据将会变成:
如上图这样列标题和数据主体对不上号。或许有的朋友会想,直接设个固定值不就完了,但是对于一些不能确定长度的数据设固定值显然不能达到我们的要求。带着这个问题我百度谷歌了一番 发现网络上并没有我太满意的相关资料。maozhuxi曾经曰过:自己动手丰衣足食。我只好听从maozhuxi的教导自己解决问题。
要设置列宽度,我们必须知道easyui datagrid在html中是怎么样的。于是乎动用chrome的开发人员工具,查看一番如图:
头部列标题为:
即我们可以用Jquery选择器 $(".datagrid-header-inner table tr:first-child")来取到标题列 (数据主体列也差不多我就不贴出来了)。
既然能取得到这些,只要我们判断数据主体列的宽度大还是 标题列的宽度大。相应的设置回去 那标题和数据不就对其了。来上代码:
<script language="javascript" type="text/javascript"> $(document).ready(function () { $("#test").datagrid({ url: "/Test/Test1Data", type: "post", datatype: "json", width: 465, height: 280, loadMsg: "数据加载中,请稍后...", fitCloumns: true, nowrap: true, rownumbers: false, pagination: true, singleSelect: true, showFooter: true, columns: [[ { field: 'testName', title: '测试名', align: 'center' }, { field: 'testValue', title: '测试值', align: 'center' } ]], //bind数据成功设置列宽度 onLoadSuccess: function (data) { //datagrid头部 table 的第一个tr 的td们,即columns的集合 var headerTds = $(".datagrid-header-inner table tr:first-child").children(); //datagrid主体 table 的第一个tr 的td们,即第一个数据行 var bodyTds = $(".datagrid-body table tr:first-child").children(); var totalWidth = 0; //合计宽度,用来为datagrid头部和主体设置宽度 //循环设置宽度 bodyTds.each(function (i, obj) { var headerTd = $(headerTds.get(i)); var bodyTd = $(bodyTds.get(i)); $("div:first-child", headerTds.get(i)).css("text-align", "center"); var headerTdWidth = headerTd.width(); //获取第i个头部td的宽度 //这里加5个像素 是因为数据主体我们取的是第一行数据,不能确保第一行数据宽度最宽,预留5个像素。有兴趣的朋友可以先判断最大的td宽度都在进行设置 var bodyTdWidth = bodyTd.width() + 5; var width = 0; //如果头部列名宽度比主体数据宽度宽,则它们的宽度都设为头部的宽度。反之亦然 if (headerTdWidth > bodyTdWidth) { width = headerTdWidth; bodyTd.width(width); headerTd.width(width); totalWidth += width; } else { width = bodyTdWidth; headerTd.width(width); bodyTd.width(width); totalWidth += width; } }); var headerTable = $(".datagrid-header-inner table:first-child"); var bodyTable = $(".datagrid-body table:first-child"); //循环完毕即能得到总得宽度设置到头部table和数据主体table中 headerTable.width(totalWidth); bodyTable.width(totalWidth); bodyTds.each(function (i, obj) { var headerTd = $(headerTds.get(i)); var bodyTd = $(bodyTds.get(i)); var headerTdWidth = headerTd.width(); bodyTd.width(headerTdWidth); }); } }); $("#test").datagrid('getPager').pagination({ showPageList: false, showRefresh: false, beforePageText: "第", afterPageText: "页 <a href='javascript:void(0)' onclick='GoEnterPage()'><img src='http://www.cnblogs.com/Content/themes/icons/Go_.gif'></a>,共{pages}页", displayMsg: '当前{from}到{to}条,总共{total}条' }); }); function GoEnterPage() { var e = jQuery.Event("keydown"); e.keyCode = 13; $("input.pagination-num").trigger(e); } </script>
设置宽度的相关代码都已经打上注释了。测试了下 可行。无图无真相 附上效果图:
相关推荐
easyUI datagrid 自动调整行号大小
总的来说,实现EasyUI数据表格列宽自适应内容宽度的过程涉及到对数据表格的遍历、对文本内容的长度计算、列宽的动态设置以及对列宽调整功能的冻结。通过这些步骤,我们可以确保数据表格的列宽能够恰当地展示内容,...
总的来说,通过设置`fitColumns: true`和监听resize事件并调用`datagrid('resize')`,你可以实现EasyUI GridView的宽度自适应窗口变化。这种方法对于创建响应式的Web界面非常有用,使得用户在不同设备或屏幕尺寸下都...
2. **配置选项**: `options` 中常见的参数有 `columns`(定义列)、`url`(数据源地址)、`pagination`(是否开启分页)、`fit`(是否自适应容器宽度)等。 3. **数据绑定**: 通过 `loadData` 方法或者在初始化时...
3. **列定义**:`columns`数组用于定义显示的列,每个元素是一个对象,包含`field`(字段名)、`title`(列标题)、`width`(宽度)等属性。如果需要编辑功能,可以设置`editor`属性,如`{type: 'text'}`表示文本...
`columns`属性是一个二维数组,定义了表格的列信息,包括字段名(`field`)、列标题(`title`)和宽度(`width`)等。例如: ```javascript columns: [ [{ field: 'code', title: 'Code', width: 100 }, { field:...
在这个例子中,`url`属性指定了数据源,`toolbar`用于添加操作栏,`pagination`开启分页,`rownumbers`显示行号,`fitColumns`使列自适应宽度,`singleSelect`则设定单选模式。 总的来说,EasyUI 是一个强大的工具...
3. easyui的Datagrid组件:Datagrid组件用于展示表格型数据,并且支持分页、排序、搜索等操作。初始化时,通过url属性指定了数据的异步加载地址,还定义了分页的参数如每页大小、页码等,并且自适应父容器的尺寸,...
datagrid:修复在datagrid宽度太小的时候“fitColumns”方法无法正常工作的问题 Improvement(改进) EasyUI的所有组件已经支持非固定 百分比大小的尺寸设置; menu:添加“showItem” “hideItem”和“resize”...
使用方法是在定义DataGrid列的时候,通过`width: fillsize(0.08)`这样的方式来设置列宽。 #### 6. 获取所选记录行(单选) 在DataGrid中,有时候需要获取用户所选的一行记录。为了避免用户误操作,例如未选择或...
datagrid:修复在datagrid宽度太小的时候“fitColumns”方法无法正常工作的问题 Improvement(改进) EasyUI的所有组件已经支持非固定 百分比大小的尺寸设置; menu:添加“showItem” “hideItem”和“resize”...
在HTML结构方面,EasyUI的datagrid组件以一个标签的形式存在,并且具备了Fit属性,这表示表格会自适应其父容器的宽度。每个列(th)都通过field属性与数据模型的字段进行关联,其中第一个列设置了checkbox属性,表示...
创建一个基本的HTML表格元素,并设置相应的属性,如`id`、`fit`(是否自适应宽度)、`singleSelect`(是否允许单选)等: ```html <table id="datagrid" title="客户端分页示例" toolbar="#toolbar" fit="true...
表头定义了各列的显示字段、宽度、对齐方式和格式化函数。 总结而言,jQuery EasyUI 1.4版本为前端开发者提供了一套完整的、易于使用的工具集,大大降低了开发复杂UI的难度,同时也提供了中文文档以便更好地服务于...
设置 `fitColumns` 为 `true` 可以让 Datagrid 的列宽自适应容器宽度。 #### 三、总结 通过上述介绍,我们了解了在使用 `jQuery Datagrid` 时可能遇到的一些常见问题及其解决方案。正确处理这些问题不仅能够提高...
2. `fitColumns`: 是否使列自适应宽度,如果为`false`,则不自动调整列宽。 3. `striped`: 是否开启斑马线效果,使得表格行交替显示不同颜色,提高视觉效果。 4. `singleSelect`: 是否允许单选,如果为`false`,则...
EasyUI 还提供了诸如表单(Form)、菜单(Menu)、树(Tree)、数据网格(DataGrid)等其他组件,以及各种布局方式(如流式布局、网格布局等),这些组件都具有类似的属性和事件机制,可以根据需求进行灵活配置。...