`

[ExtJS] GridPanel 列自适应内容宽度

阅读更多
[ExtJS] GridPanel 列自适应内容宽度
------------------


1



gridpanel beforerender
				'beforerender' :function(view) {
					var gridcolumns = view.headerCt.getGridColumns();
					view.store.on('load', function(store, records) {
						Ext.each(gridcolumns, function(gridcolumn, colIdx) {
							var dataIndex = gridcolumn.dataIndex;
							var maxLength = 0;
							Ext.each(records, function(record, rowIdx) {
								var tmp = record.get(dataIndex) + '';
								if (tmp.length > maxLength) {
									maxLength = tmp.length;
								}
								/** 若是 wrap 单元格, 换行处理, 尽量避免水平滚动条 */
								if (Ext.isDefined(gridcolumn.wrap)) {
									var gridview = view.getView();
									var row = gridview.all.elements[rowIdx];
									var cell = row.cells[colIdx + 1];
									var cellDiv = cell.childNodes[0];
									cellDiv.style['white-space'] = 'normal';
									cellDiv.style['overflow'] = 'visible';
								}
							});
							/** 若是标题长度大于内容长度, 取标题长度, 标题长度为中文字符 */
							if (gridcolumn.text.length > maxLength) {
								maxLength = gridcolumn.text.length;
								gridcolumn.woc = true;
							}
							
							/** 隐藏, ActionColumn, wrap 列, flex列 不再计算. */
							/** 长度计算需要加上 22 的菜单长度. 英文默认7, 中文默认 12 */							
							if (!gridcolumn.hidden && !(gridcolumn instanceof Ext.grid.column.Action) && !Ext.isDefined(gridcolumn.wrap) && !Ext.isDefined(gridcolumn.flex)) {
								if(Ext.isDefined(gridcolumn.woc)) {
									gridcolumn.minWidth = gridcolumn.width = maxLength * 12 + 22;
								} else {
									gridcolumn.minWidth = gridcolumn.width = maxLength * 7 + 22;
								}
							};
						});
						
						/** 重新布局 gridpanel 组件*/
						view.doLayout();
					});
				}
			


2

var grid = Ext.create('Ext.grid.Panel', {
			store : Ext.getStore('userStore'),
			autoShow : true,
			selType : 'rowmodel',
			loadMask: true,
			selModel : Ext.create('Ext.selection.CheckboxModel', {
						listeners : {
							selectionchange : function(sm, selections) {
								grid.down('#removeButton')
										.setDisabled(selections.length == 0);
							}
						}
					}),
			columns : [{
						header : '用户ID',
						dataIndex : 'userId'
					}, {
						header : '用户名称',
						dataIndex : 'userName',
						woc : true
					}, {
						header : '用户性别',
						dataIndex : 'sex',
						woc : true
					}, {
						header : '用户年龄',
						dataIndex : 'age'
					}, {
						header : '用户邮箱',
						dataIndex : 'email'
					}, {
						header : '手机号码',
						dataIndex : 'phone'
					}, {
						header : '用户地址',
						dataIndex : 'address',
						wrap : true,
						flex : 1,
						woc : true
					}, {
						header : '公司名称',
						dataIndex : 'company',
						woc : true
					}, {
						header : '用户职务',
						dataIndex : 'duty',
						woc : true
					}, {
						header : '备注',
						dataIndex : 'note',
						woc : true
					}, {
						xtype : 'actioncolumn',
						draggable : false,
						header : '操作',
						width : 50,
						items : [{
							icon: 'extjs/examples/shared/icons/fam/cog_edit.png', 
							tooltip : '应用',
							handler : function(grid, rowIndex, colIndex) {
								
							}
						}]
					}],
			dockedItems : [{
						xtype : 'toolbar',
						items : [{
									text : '添加',
									itemId : 'addButton',
									iconCls : 'add',
                                    action : 'add'
								}, '-', {
									itemId : 'removeButton',
									text : '删除',
									iconCls : 'remove',
									disabled : true,
                                    action : 'remove'
								}, '-']
					}]
		});




3
woc : width of single chinese character , default 12.

wrap : 溢出则换行.

flex : 自动填充列
  • 大小: 27.9 KB
分享到:
评论

相关推荐

    EXTJS_GridPanel_ColumnModel_列的宽度随数据变化而变化

    这篇博客"EXTJS_GridPanel_ColumnModel_列的宽度随数据变化而变化"探讨了如何使GridPanel的列宽根据数据内容自动调整,以确保最佳的用户界面体验。 在EXTJS中,ColumnModel允许我们定义每列的标题、数据字段、宽度...

    ExtJs GridPanel双击事件获得双击的行

    GridPanel由Store(数据存储)和ColumnModel(列模型)组成,它们定义了数据源和显示样式。在创建GridPanel时,我们需要配置这两个部分,例如: ```javascript var store = Ext.create('Ext.data.Store', { fields...

    ExtJs GridPanel延时加载.rar

    在给定的"ExtJs GridPanel延时加载.rar"文件中,主要涉及的核心概念是ExtJs中的GridPanel组件以及延时加载技术。GridPanel是ExtJs中一个非常重要的组件,它用于展示表格数据,而延时加载则是一种优化大量数据处理的...

    给Extjs的GridPanel增加“合计”行

    在EXTJS中,GridPanel是一种常用的组件,用于展示表格数据。在实际应用中,我们经常需要在GridPanel底部显示一行“合计”行,以便对某一列或多列的数据进行求和或其他统计操作。这篇博文“给Extjs的GridPanel增加...

    Extjs gridpanel 出现横向滚动条问题的解决方法

    在使用ExtJS开发Web应用程序时,经常会遇到在GridPanel中数据列过多,导致横向滚动条自动出现的问题。这个问题主要是由于GridPanel的宽度不足以容纳所有的列宽,因此浏览器会自动显示横向滚动条以便用户查看全部数据...

    extjs gridpanel例子和简单应用

    - `ColumnModel`定义了`GridPanel`中的列配置,包括每列的标题、宽度、排序属性等。它是`GridPanel`展示数据的关键配置对象。 5. **PagingToolbar** - `PagingToolbar`用于实现分页功能。它可以根据指定的`Store`...

    ExtJS的GridPanel导出excel文件

    ExtJS的GridPanel导出excel文件,方便快捷易懂!

    ExtJS grid过滤操作

    ExtJS Grid是一个强大的数据展示组件,它允许用户以表格的形式查看和操作大量数据。在实际应用中,数据过滤是常见的需求,以便用户能快速定位到感兴趣的信息。本篇将深入探讨ExtJS Grid的过滤操作,以及如何动态地对...

    通过Servlet让Extjs GridPanel 显示数据库数据.docx

    ### 通过Servlet让Extjs GridPanel显示数据库数据 在现代Web开发中,将数据库中的数据动态展示在前端界面上是一项常见的需求。本文档主要介绍如何通过Servlet技术配合Extjs框架中的GridPanel组件来实现这一功能。 ...

    ExtJs GridPanel 操作

    ExtJS GridPanel是Sencha ExtJS框架中的一个核心组件,用于创建数据网格,展示大量结构化数据。在本文中,我们将深入探讨GridPanel的操作,包括其功能、配置选项以及如何扩展GridPanel以满足复杂需求。 首先,...

    Extjs让Gridpanel组件自动滚屏

    后来公司让改变一个Gridpanel的展现方式,要求实现滚屏的效果。于是我就开始找API相关的功能了。找了很久,也没有找到框架的相应控制方法,然后在网上找了很久,也没有找到有人给去示例,无奈就只能自己写JS来控制...

    ExtJS锁定列头源码

    ExtJS锁定列头源码 ExtJS锁定列头源码

    ExtJS 表格面板GridPanel完整例子

    3. **Columns**: 表示表格列的配置,定义每列的显示内容、宽度、排序等属性。 4. **ViewConfig**: 配置表格的视图样式,如行高、字体大小、行选择等。 5. **Plugins**: 可选的增强功能,如分页、排序、过滤等。 ...

    extjs gridPanel动态 源代码

    NULL 博文链接:https://xiaohewoai.iteye.com/blog/409898

    extjs单元格无法复制

    ExtJS GridPanel 单元格无法复制问题解决方案 ExtJS 是一个功能强大的 JavaScript 框架,广泛应用于 Web 开发中。但是,在使用 ExtJS 的 GridPanel 组件时,可能会遇到单元格无法选中复制的问题,特别是在 IE ...

    ExtJS介绍以及GridPanel

    3. 创建列模型(ColumnModel):定义GridPanel的列,包括列的标题、数据字段绑定、宽度等,例如`Ext.grid.ColumnModel`。 4. 实例化GridPanel:配置GridPanel的各种属性,如高度、宽度、是否可拖动列等,然后将...

    ExtJs GridPanel简单的增删改实现代码

    ExtJs GridPanel是ExtJs框架中用于展示和管理表格数据的一个重要组件,它提供了丰富的API接口,方便开发者实现复杂的数据操作。根据给出的文件信息,这里将详细解读在ExtJs GridPanel中如何实现基本的增加、删除和...

    ExtJS3.2列布局

    如果不设定具体宽度,列会根据内容自动调整大小。 例如,假设你有一个form表单需要设计成两列,左边一列放置用户名和密码输入框,右边一列放置注册和登录按钮,可以这样编写代码: ```javascript var formPanel = ...

    Extjs入门教程(treePanel和GridPanel)

    2. 创建GridPanel:定义Grid的数据模型,设置列配置,添加行操作和列筛选。 3. 数据绑定:通过store将TreePanel和GridPanel连接起来,使得选择树节点可以动态改变Grid的数据。 4. 事件监听:添加事件监听器来响应...

Global site tag (gtag.js) - Google Analytics