根据项目需要实现动态表头效果,查询了网站的资料,发现写的都不是很详细,也有些不能实现,听网上说可以用Ext.ux.grid.DynamicGridPanel来实现动态表头,可是放在我的项目里面怎么也无法实现,不知道是我人笨,还是这个插件本身就存在问题,没办法,既然插件无法实现,那就只好自己开发咯,静下新来想想,无非就是grid的ColumnModel和store的feilds变换而已,只要动态去后台取,那实现起来应该是没问题,想到这里,立即开发,没法到还真让我实现,呵呵,现在贴出来与各位分享分享,顺便留着记录,代码如下:
实现步骤如下:
1.创建动态表头store需要的field数组需要的java类
public class DynamicFieldsDTO {
public String name;
public String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
2.创建动态表头ColumnModel需要的columns需要的java类
public class DynamicColumnsDTO {
public String header;
public String dataIndex;
public boolean show;
public boolean sortable;
public int width;
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
public String getDataIndex() {
return dataIndex;
}
public void setDataIndex(String dataIndex) {
this.dataIndex = dataIndex;
}
public boolean isShow() {
return show;
}
public void setShow(boolean show) {
this.show = show;
}
public boolean isSortable() {
return sortable;
}
public void setSortable(boolean sortable) {
this.sortable = sortable;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
}
3.创建GetColumnAction类
public class GetColumnAction extends AjaxAction {
protected Object actionExecute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
List achievemens = achievementService.findAllDefined(); //从数据库获取grid显示字段
/***************转换Ext动态表头处理************************/
List list=new ArrayList();
List fieldsList=new ArrayList();
List columnsList=new ArrayList();
for (int i = 0; i <achievemens.size(); i++) {
TkBmAchievementDefine tkBmAchievement =(TkBmAchievementDefine)achievemens.get(i);
DynamicFieldsDTO fieldsDto=new DynamicFieldsDTO();
fieldsDto.setName(tkBmAchievement.getColumns());
fieldsDto.setType("string");
fieldsList.add(fieldsDto);
DynamicColumnsDTO columnsDto=new DynamicColumnsDTO();
if(tkBmAchievement.getColumns().equals("id")){
//隐藏某列
}else{
columnsDto.setHeader(tkBmAchievement.getName());
columnsDto.setDataIndex(tkBmAchievement.getColumns());
columnsDto.setShow(true);
columnsDto.setSortable(true);
columnsDto.setWidth(100);
columnsList.add(columnsDto);
}
}
JSONArray columnjsonArray =toJson(columnsList);
JSONArray fieldsjsonArray =toJson(fieldsList); //转换成JSON对象
response.getWriter().write("{columns:"+columnjsonArray+",fields:"+fieldsjsonArray+"}");
return null;
}
}
4.客户端处理代码如下:
Ext.onReady(function() {
Ext.Ajax.request({
url:'getColumn.do',
failure:function(){
Ext.Msg.alert('信息提示','数据加载异常....');
},
success:function(response){
if(response.responseText != null && response.responseText.length != 0){
var responseArray = Ext.util.JSON.decode(response.responseText);
var store=new Ext.data.Store({
proxy: new Ext.data.HttpProxy({
url: 'searchTkBmAchievementImport.do'
}),
reader: new Ext.data.JsonReader({
root:'list',
totalProperty:'Total',
remoteSort:false,
fields:responseArray.fields
})
});
var bbt = new Ext.PagingToolbar({
pageSize:25,
store: store,
cls : 'o-toolbar',
displayInfo: true,
displayMsg: '当前显示 {0} - {1} 条/ 共 {2} 条',
emptyMsg: "没有记录"
}
);
var sm=new Ext.grid.CheckboxSelectionModel();
var columntype =new Array() ;
columntype.push(sm);
Ext.each(responseArray.columns,function(h){
columntype.push({
sortable:h.sortable,
width:h.width,
header:h.header,
dataIndex:h.dataIndex
});
});
var cm=new Ext.grid.ColumnModel(columntype);
var grid = new Ext.grid.GridPanel({
stripeRows : true,
id:'gridId',
store: store,
cm: cm,
sm: sm,
columnLines: true,
trackMouseOver:false,
loadMask: true,
viewConfig: {
showPreview:false,
getRowClass : function(record, rowIndex, p, store){
if(this.showPreview){
p.body = '<p>'+record.data.excerpt+'</p>';
return 'x-grid3-row-expanded';
}
return 'x-grid3-row-collapsed';
}
},
bbar: bbt,
width:840,
height:340,
autoExplandColumn:1,
animCollapse: false,
iconCls: 'icon-grid',
title: '业绩维护',
el: 'dynamic'
});
grid.render();
store.load({params:{start:0, limit:25}});
grid.getSelectionModel().selectFirstRow();
}
}
});
});
5.创建jsp页面调用js,此处简单不再描述
分享到:
相关推荐
总的来说,`Ext grid`的合并表头功能是通过`GroupHeaderPlugin`实现的,这个插件结合了`JavaScript`和`CSS`来创建多级、可定制的表头结构。通过熟练掌握这一特性,开发者能够为用户提供更直观、更易理解的数据展示,...
表头的三层插件则是EXT Grid的一种扩展功能,它允许用户在表头部分实现更为复杂和多层次的布局,以更好地管理和组织数据列。这种插件通常用于展现层级关系的数据,比如分类、分组或树状结构的信息。 EXT Grid的表头...
标题“extjs 实现动态表头”表明我们要讨论的是如何在ExtJS环境中构建一个能够动态改变列头的表格。动态表头的核心在于理解ExtJS的GridPanel组件和ColumnModel类。GridPanel用于显示数据,而ColumnModel则定义了...
Ext grid 动态添加字段、列扩展, 如何动态添加或者删除一个grid的列
在本文中,我们将深入探讨"Ext表格列锁定+多表头插件"这一主题,它在Ext3.4版本中的实现及其相关技术。这个插件主要用于改进Ext Grid的用户体验,特别是处理大量数据时,通过列锁定和多表头功能,使得用户能够更有效...
在EXT Grid中,表头(Header)是显示列标题的部分,而“复杂表头”则是指具有多层次、多维度展示数据的表头,可以更直观地组织和显示复杂的数据关系。 "EXT 复杂表头插件"是为了扩展EXT Grid的功能,使其能够支持...
"Ext3.4.0复杂(多行)表头+锁定多列例子"这个标题涉及到的是一个JavaScript库——Ext JS的一个高级功能应用。Ext JS是一个流行的前端框架,用于构建富互联网应用程序(RIA),它提供了一套完整的组件化开发工具,包括...
Ext grid中渲染进度条,超帅 源码-----下载不扣分,回帖加1分,欢迎下载,童叟无欺。Ext grid中渲染进度条,超帅 源码-----下载不扣分,回帖加1分,欢迎下载,童叟无欺。Ext grid中渲染进度条,超帅 源码-----下载不扣分...
根据提供的文件信息,我们可以深入探讨如何在 Ext JS 中实现 Grid 的单元格合并功能。此案例主要涉及到了自定义 GridView 的 `renderHeaders` 方法来达到单元格合并的目的,并且还涉及了模板(Template)的使用、...
在本文中,我们将深入探讨EXT4.3如何实现动态表单以及与之相关的动态grid功能。 1. **EXT4.3动态表单**: - **组件化设计**:EXT4.3中的表单基于组件模型,可以方便地创建、添加、删除和修改表单字段。通过`Ext....
EXT Grid的复杂表头可以通过使用嵌套的`Ext.grid.header.Container`来实现。每个Container可以包含一个或多个列(`Ext.grid.Column`),并且可以有自身的标题和子标题。这样,我们可以创建出层次化的列标题,以反映...
这篇博客"Ext Grid 导出Excel"可能详细介绍了如何实现这一功能。 首先,让我们理解Ext Grid的基本工作原理。Ext Grid是Sencha Ext JS框架的一部分,它允许开发者创建可配置的表格视图,可以显示从服务器获取的数据...
EXT Grid没有直接提供行头合并,但可以通过创建自定义的表头组件来实现,同样使用`colspan`属性来合并。 7. **监听Store事件**:当数据源发生变化时,如添加、删除或更新记录,可能需要重新计算合并范围并更新渲染...
在探讨“Ext Grid表格的自动宽度及高度的实现”这一主题时,我们深入解析如何在Ext JS框架下,利用其强大的Grid组件自适应容器尺寸,实现表格宽度与高度的自动调整。这一技术对于构建响应式、用户友好的界面至关重要...
多表头插件是ExtJS Grid的一个重要特性,它允许我们创建具有多层次、复杂结构的表头,以便更好地组织和呈现数据。在ExtJS Grid中,多表头能够帮助用户更清晰地理解列的分组和关系,提高数据的可读性和分析性。 首先...
本篇将详细介绍如何实现 `Ext Grid` 的列动态添加。 1. **创建 ColumnModel** `Ext.grid.ColumnModel` 是用于定义 `GridPanel` 列结构的类。在创建 `ColumnModel` 时,我们需要提供一个包含列信息的 JavaScript ...
但是,这需要更复杂的处理,因为Excel的样式系统与EXT Grid的样式不完全相同。 6. **性能优化**:对于大数据量的EXT Grid,直接导出可能导致浏览器卡顿。为了避免这种情况,可以考虑分批导出,或者使用服务器端导出...
这些文件可以帮助我们理解EXTGRID的实现细节和数据结构。 综上所述,EXTGRID实例展示了如何利用EXT JS库创建一个功能强大且用户友好的数据管理界面,通过深入研究这个实例,开发者可以学习到EXT GRID的各种特性和...
总的来说,EXT Grid是JSP开发中实现Ajax数据表格的强大工具,它提供了一系列高级特性和灵活的配置选项,使开发者能够快速构建高效且用户友好的数据展示界面。通过熟练掌握EXT Grid的使用,你可以提高Web应用的交互性...
总结来说,"ext grid json分页显示"是通过EXT.js的Grid组件结合DWR的Ajax能力,实现前端数据的分页加载和显示。这种方式既提高了用户界面的响应速度,又有效管理了大数据量的显示,是现代Web应用中常用的数据展示...