Добавить / удалить столбец из Extjs4 Grid - PullRequest
1 голос
/ 06 ноября 2011

Мне нужна функция, которая будет добавлять / удалять столбцы из сетки ExtJS 4. Сетка написана на Extjs 4. После того, как я в Google, я обнаружил следующий код.

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 ]

5 голосов
/ 28 октября 2012

функция создания

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();
0 голосов
/ 30 ноября 2011

Я решил эту проблему и сохранил все отображаемые столбцы в массиве.Чем у меня есть функция, которая обновляет сетку

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;
            }
        }
    }
}

.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; }


}
...