2015-02-16 5 views
0

У меня есть два простых требованияНе удается обновить фильтрацию igGrid

a) I need to programmatically change the number of columns displaying in igGrid 
b) I need to programmatically update the filters in igGrid 

Я нахожусь под впечатлением, что изменить количество столбцов программно в первую очередь необходимо «уничтожить» сетки затем воссоздать его.

Чтобы обновить фильтры вы просто должны это сделать

grid.igGridFiltering("filter", ([{ fieldName: "Column1", expr: true, cond: "true" }])); 

Я всегда получаю эту ошибку при вызове моего кода

cannot call methods on igGridUpdating prior to initialization; attempted to call method 'destroy' 

Вот фрагмент кода

scope.changeView = function(v) { 
    var grid = scope.element; //from directive 
    if (grid.data("igGrid") != null) { 
     grid.igGrid('destroy'); 
    } 
    updateGrid(grid, v); 
}; 

function updateGrid(grid, v) { 
    scope.gridOptions = coreFunctions.gridOptions(); //from service 
    scope.gridOptions.dataSource = scope.dataSource; 
    var cols = JSON.parse(v.Json); 
    cols = cols.fields; 
    scope.gridOptions.columns = []; 
    angular.forEach(cols, function(value, index) { 
     scope.gridOptions.columns.push({ 'headerText': value, 'key': value, width: '200px' }); 
    }); 
    grid.igGrid(scope.gridOptions); //error occurs here! 
    grid.igGrid('dataBind'); 
    grid.igGridFiltering("filter", ([{ fieldName: "Column1", expr: true, cond: "true" }])); 
} 

ответ

0

You правильно, что вам нужно будет уничтожить виджет и снова создать его снова, используя новые столбцы. В зависимости от сценария может быть менее болезненно использовать renderMultiColumnHeader method, который принимает массив столбцов в качестве аргумента. Таким образом, этот метод будет повторно отображать сетку с пройденными вами столбцами.