从Extjs4 Grid添加/删除列

时间:2011-11-06 17:56:00

标签: extjs grid extjs4

我需要一个可以从ExtJS 4网格添加/删除列的函数。 网格是用Extjs 4编写的。在我谷歌之后,我发现了以下代码。

function reconfigure(store, columns) {
    // debugger;
    var me = grid;

    if (me.lockable) {
        me.reconfigureLockable(store, columns);
        return;
    }

    if (columns) {
        me.headerCt.removeAll();
        me.headerCt.add(columns);
    }

    if (store) {
        store = Ext.StoreManager.lookup(store);
        me.bindStore(store);
        //  me.getView().refresh();
    } else {
        me.getView().refresh();
    }
}

我正在调用此函数的代码

var store = grid.getStore();
reconfigure(store, fields);

它替换了标题行,但不会刷新数据。我正在使用ExtJs 4.0

2 个答案:

答案 0 :(得分:5)

创建功能

GetProductsGetStore: function(fiels) {    
    var ret = Ext.create('Ext.data.Store', {
        autoLoad: false,
        proxy: {
            type: 'ajax',
            url: '/index.php/ajax/ProductsGet',
            reader: {
                type: 'json'
            },
            extraParams: {
                currency: '0'
            }
        },
        fields: fiels
    });

    return ret;
}

和没有商店的网格面板

this.Product = Ext.create('Ext.grid.Panel', {
    width: '100%',
    height: 154,
    border: 0,
    multiSelect: true,
    allowDeselect: true,
    columns: [
        {
            text: 'article',
            dataIndex: 'article',
            flex: 2
        },
        {
            text: 'name',
            dataIndex: 'name',
            flex: 2
        },
        {
            text: 'price',
            dataIndex: 'price',
            flex: 1
        }
    ]
});

动态编辑网格

var fields = [
    'id',
    'name',
    'checked',
    'price',
    'currency',
    'src'
];
this.Product.reconfigure(th.GetProductsGetStore(fields));
this.Product.store.load();

答案 1 :(得分:0)

我解决了这个问题,并将所有显示的列保存在数组中。 比我有一个更新网格的功能

function ShowHideColumns(settingsColumn) {
    var gridColumns = grid.columns;
    var len = gridColumns.length;
    for (var j = 0; j < len; j++) {
        var gridColumn = gridColumns[j];
        for (var i = 0; i < settingsColumn.length; i++) {
            var columnSetting = settingsColumn[i];
            if (gridColumn.text == columnSetting.gridName) {
                if (columnSetting.isActive && gridColumn.hidden)
                    gridColumn.show();
                else if (!gridColumn.hidden && !columnSetting.isActive)
                    gridColumn.hide();
                break;
            }
        }
    }
}

请参阅以下settingColumn架构。 settingsColumn是数组 持有settingColumn项目。每个项目都描述了网格中的列信息。

[DataContract]
[System.SerializableAttribute()]
public partial class SettingsSettingColumn
{


    [System.Xml.Serialization.XmlAttributeAttribute()]
    [DataMember]
    public string name { get; set; }

    [System.Xml.Serialization.XmlAttributeAttribute()]
    [DataMember]
    public string gridName { get; set; }

    [System.Xml.Serialization.XmlAttributeAttribute()]
    [DataMember]
    public string type { get; set; }

    [System.Xml.Serialization.XmlAttributeAttribute()]
    [DataMember]
    public bool isActive { get; set; }

    [System.Xml.Serialization.XmlAttributeAttribute()]
    [DataMember]
    public float width { get; set; }


}