`
JavaSam
  • 浏览: 954763 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

extjs gridpanel例子很实用

 
阅读更多
/**
 *模拟map
 */
Map = function(){
    var mapAddM = {
        /**
         * entry函数
         * @param {Object} key
         * @param {Object} val
         */
        entry: function(key, val, flag){
            this.key = key;
            this.value = val;
            this.flag = flag;
        },
        //put方法
        put: function(key, val, flag){
            this.store[this.store.length] = new this.entry(key, val, flag);
        },
        //get方法
        get: function(key){
            for (var i = 0; i < this.store.length; i++) {
                if (this.store[i].key === key) 
                    return this.store[i].value;
            }
        },
        //get方法
        getFlag: function(key){
            for (var i = 0; i < this.store.length; i++) {
                if (this.store[i].key === key) 
                    return this.store[i].flag;
            }
        },
        //remove方法
        remove: function(key){
            for (var i = 0; i < this.store.length; i++) {
                this.store[i].key === key && this.store.splice(i, 1);
            }
        },
        //keyset
        keySet: function(){
            var keyset = new Array;
            for (var i = 0; i < this.store.length; i++) 
                keyset.push(this.store[i].key);
            return keyset;
        },
        //valset
        valSet: function(){
            var valSet = new Array;
            for (var i = 0; i < this.store.length; i++) 
                valSet.push(this.store[i].value);
            return valSet;
        },
        //flagSet
        flagSet: function(){
            var flagSet = new Array;
            for (var i = 0; i < this.store.length; i++) 
                flagSet.push(this.store[i].flag);
            return flagSet;
        },
        //clear
        clear: function(){
            this.store.length = 0;
        },
        //size 
        size: function(){
            return this.store.length;
        },
        /**
         *  迭代子
         */
        iterator: function(){
            //TODO 待实现
            var obj = this.keySet();//所有的key集合
            var idx = 0;
            var me = {
                /**
                 * 当前key
                 */
                current: function(){
                    return obj[idx - 1];
                },
                /**
                 * 第一个key
                 */
                first: function(){
                    return obj[0];
                },
                /**
                 * 最后一个key
                 */
                last: function(){
                    return obj[obj.length - 1];
                },
                /**
                 * 是否还有下一个元素
                 */
                hasNext: function(){
                    idx++;
                    if (idx > obj.length || null == obj[obj.length - 1]) 
                        return false;
                    return true;
                }
            };
            return me;
        }
    };
    for (var method in mapAddM) {
        this.store = new Array;
        Map.prototype[method] = mapAddM[method];
    }
}

/**
 * 生成column
 * @param {Object} map
 */
function createColumns(map){
    var columns = [];
    var i = 0;
    for (var it = map.iterator(); it.hasNext();) {
        var currentKey = it.current();//本次循环的key
        var currentVal = map.get(currentKey);//当前value
        var currentFlag = map.getFlag(currentKey);//判断是否隐藏该列
        var columni = {};
        columni.dataIndex = currentKey;
        columni.header = currentVal;
        columni.sortable = true;
        columni.width = 115;
        if ((currentFlag && (currentFlag == "hide"))) {
            columni.hidden = true;
        }
        columns.push(columni);
        i++;
    }
    return columns;
}

/**
 * 生成keyset集合
 * @param {Object} map
 */
function createReaderColumns(map){
    var columns = [];
    var i = 0;
    for (var it = map.iterator(); it.hasNext();) {
        var currentKey = it.current();//本次循环的key
        var columni = {};
        columni.name = currentKey;
        columns.push(columni);
        i++;
    }
    return columns;
}

/**
 * 渲染extgrid
 */
var _pageSize = 10;
function rendExtGrid(_url, _params, renderDiv, map){
    jQuery("#" + renderDiv).html("");//清空已经存在的数据
    /**
     * 读取数据代理
     */
    var proxy = new Ext.data.HttpProxy({
        url: _url,
        method: "POST"
    });
    
    /**
     * 记录
     */
    var record = Ext.data.Record.create(createReaderColumns(map));
    
    /**
     * 解析数据的reader
     */
    var reader = new Ext.data.JsonReader({
        totalProperty: "Total",
        root: "Rows",
    }, record);
    
    /**
     * 数据源
     */
    var store = new Ext.data.Store({
        proxy: proxy,
        reader: reader,
        baseParams: {
            method: "POST",
            searchParam: JSON.stringify(_params) //查詢參數
        }
    });
    
    /**
     * 遮罩
     */
    var loadMarsk = new Ext.LoadMask(document.body, {
        msg: '正在加载数据……',
        disabled: false,
        store: store
    });
    
    //分页工具栏 
    var pagingToolbar = new Ext.PagingToolbar({
        pageSize: _pageSize,
        store: store,
        displayInfo: true,
        displayMsg: '第{0}-第{1}条,一共{2}条',
        emptyMsg: "无数据",
        hideBorders: true,
		cls:"pageBar",//自定义样式
        items: ['-', {
            pressed: false,
            enableToggle: true,
            cls: 'x-btn-text-icon details',
            toggleHandler: function(btn, pressed){
                var view = grid.getView();
                view.showPreview = pressed;
                view.refresh();
            }
        }]
    });
    //创建grid  
    var grid = new Ext.grid.GridPanel({
        store: store,
        region: 'center',
		border:false,
        mode: "remote",
        viewConfig: {
            layout: function(){
                if (!this.mainBody) {
                    return;
                }
                var g = this.grid;
                var c = g.getGridEl();
                var csize = c.getSize(true);
                var vw = csize.width;
                if (!g.hideHeaders && (vw < 20 || csize.height < 20)) {
                    return;
                }
                if (g.autoHeight) {
                    if (this.innerHd) {
                        this.innerHd.style.width = (vw) + 'px';
                    }
                }
                else {
                    this.el.setSize(csize.width, csize.height);
                    var hdHeight = this.mainHd.getHeight();
                    var vh = csize.height - (hdHeight);
                    this.scroller.setSize(vw, vh);
                    if (this.innerHd) {
                        this.innerHd.style.width = (vw) + 'px';
                    }
                }
                if (this.forceFit) {
                    if (this.lastViewWidth != vw) {
                        this.fitColumns(false, false);
                        this.lastViewWidth = vw;
                    }
                }
                else {
                    this.autoExpand();
                    this.syncHeaderScroll();
                }
                this.onLayout(vw, vh);
            }
        },
        columns: createColumns(map),
        frame: false, //表格外加边框   
        collapsible: true,
        animCollapse: false,
        autoHeight: true,
        autoWidth: true,
        autoScroll: true,
        height: 250,
		
        sm: new Ext.grid.RowSelectionModel({
            singleSelect: true
        }),
        iconCls: 'icon-grid'
    
    });
	store.load({ params: { start: 0, limit: _pageSize} });
    /**
     * 容器:为了能宽高自适应
     */
    var viewPort = new Ext.Panel({
        layout: 'fit',
		renderTo: renderDiv,
		autoScroll: false,
		height:400,
		bbar: pagingToolbar,
        items: [grid]
    });
    
    
}

 

分享到:
评论

相关推荐

    EXTJS实用开发指南

    EXTJS的组件库主要分为底层API、控件(widgets)和实用工具(Utils)三大部分。 - 底层API(core):提供DOM操作、事件处理和查询的基本功能,包括`DomHelper.js`和`Element.js`等文件。 - 控件(widgets):包括...

    轻松搞定Extjs

    表格组件是展示大量数据的最佳选择,GridPanel则是Extjs中最强大的表格组件之一。 - **表格、表格面板**: 简要介绍了表格组件的基本概念。 - **列模型与数据**: 详细解释了如何定义列模型以及填充表格数据。 - **...

    Extjs应用教程 提高篇

    教程还提供了一个实用功能,允许用户选择本地数据库、表名,然后自动在GridPanel中显示数据。注意,这个示例是基于ASP.NET 2.0编译的。 在实现过程中,用户需要输入数据库名称,然后从出现的ComboBox列表中选择表名...

    Extjs2.0动态加载gird的例子

    在这个例子中,我们将探讨如何在ExtJS 2.0中实现动态加载的Grid组件,这是一个非常实用的功能,尤其对于处理大量数据时,可以显著提高用户体验。 动态加载Grid意味着数据不是一次性全部加载到页面中,而是根据用户...

    Extjs4.0视频教程和源代码,另附文档翻译

    - **Store的作用**:解释了Store在Extjs中的角色,它是存储和管理数据的地方,可以绑定到各种UI组件上,如GridPanel等。 - **配置和使用Store**:介绍了如何创建和配置Store,以及如何将其绑定到特定的UI组件上。 - ...

    JavaScript.-Extjs基础学习笔记

    这两个控件是Extjs框架中非常实用且功能丰富的部分,广泛应用于Web应用程序的界面设计与交互逻辑构建。 ### Tab Panel(标签页控件) Tab Panel组件允许开发者在一个界面上组织多个相关的页面或面板,每个页面通过...

    ExtJs中的Grid Title部分利用XML定义(ExtJS+Struts2)

    综上所述,利用XML定义ExtJs Grid Title部分并结合Struts2 Action获取数据是一种实用的方法,它提高了代码的可维护性和灵活性。在开发过程中,根据项目的具体需求,还可以进一步优化和扩展这个解决方案。

    Ext各种标签 实用

    2. 数据展示:ExtJS的GridPanel是用于显示和操作表格数据的关键组件。它支持分页、排序、过滤和编辑等功能,可以与后台数据库进行无缝交互。除此之外,TreePanel用于展示层级结构的数据,如组织架构或文件系统。 3....

    ExtAspNet控件使用项目

    ExtAspNet控件是专门为.NET平台设计的一套丰富的Web前端组件库,它将流行的JavaScript框架ExtJS与ASP.NET紧密结合,使得开发者能够轻松构建功能强大的、具有丰富用户体验的Web应用程序。本项目"ExtAspNet控件使用...

Global site tag (gtag.js) - Google Analytics