Extjs EditorGridPanel中ComboBox列的显示问题

       EditorGridPanel中嵌入ComboBox通常不会正常显示ComboBox的store中本想显示字段,而是显示的EditorGridPanel中 store的dataindex指定的字段内容。

       为了解决这个问题需要在EditorGridPanel的ColumnModel中显示ComboBox的地方使用renderer属性,重新渲染,方法如下:

    //部门列表
    var comboxDepartmentStore = new Ext.data.Store({
        proxy: new Ext.data.HttpProxy({
            url: "GetDepartmentJson.aspx",
            method: 'GET'
        }),
        reader: new Ext.data.JsonReader({
            root: 'data',
            totalProperty: 'totalCount',
            fields: [
                        { name: 'departmentid', mapping: 'ID' },
                        { name: 'departmentname', mapping: 'Name' }
                        ]

        })
    });
    //根据Combobox列表中对应的Id的值来渲染
    function rendererMeterTypeCombobox(value, p, r) {
        var index = comboxDepartmentStore.find(Ext.getCmp('cbdepartment').valueField, value);
        var record = comboxDepartmentStore.getAt(index);
        var displayText = "";
        if (record == null) {
            return value;
        } else {
            return record.data.astype; // 获取record中的数据集中的display字段的值 
        }
    }


    var sm = new Ext.grid.CheckboxSelectionModel();

    var cm = new Ext.grid.ColumnModel({
        columns: [sm, new Ext.grid.RowNumberer(), {
            header: 'id',
            dataIndex: 'id',
            hidden: true
        }, {
            header: '姓名',
            width: 40,
            dataIndex: 'name'
        }, {
            header: '所属部门',
            width: 80,
            dataIndex: 'department',
            renderer: rendererDepartmentCombobox,
            editor: new Ext.form.ComboBox({
                id: "cbdepartment", //必须有 
                forceSelection: true,
                selectOnFocus: true,
                typeAhead: true,
                triggerAction: 'all',
                store: comboxDepartmentStore,
                mode: 'local',
                displayField: 'departmentname',
                valueField: 'departmentid',
                lazyRender: true
            })
        }],
        defaults: {
            zsortable: true,
            menuDisabled: false,
            width: 100
        }
    });

    var editGrid = new Ext.grid.EditorGridPanel({
        id: 'TestGrid',
        store: store, //EditorGridPanel使用的store
        trackMouseOver: true,
        disableSelection: false,
        clicksToEdit: 1, //设置点击几次才可编辑
        loadMask: true,
        autoHeight: true,
        cm: cm,
        sm: sm,
        viewConfig: {
            columnsText: '显示/隐藏列',
            sortAscText: '正序排列',
            sortDescText: '倒序排列',
            forceFit: true,
            enableRowBody: true
        },
        bbar: new Ext.PagingToolbar({
            pageSize: 25,
            store: store,
            displayInfo: true,
            displayMsg: '当前显示从{0}至{1}, 共{2}条记录',
            emptyMsg: "当前没有记录"
        })
    });
posted @ 2011-07-02 11:13  jadebug  阅读(2094)  评论(1编辑  收藏  举报