无法更新igGrid上的过滤

时间:2015-02-16 05:05:46

标签: infragistics ignite-ui 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" }]));
}

2 个答案:

答案 0 :(得分:0)

您是正确的,您需要销毁窗口小部件并使用新列重新创建它。根据情况,使用renderMultiColumnHeader method可能不那么痛苦,{{3}}将列数组作为参数。因此,此方法将使用您传递的列重新呈现网格

答案 1 :(得分:0)

我知道这个问题很旧,但是我也遇到了同样的问题,发现以下是(b)的简单解决方案:

假设您认为此内容

<div id="myGrid"></div>

这在脚本中

$('#myGrid').igGrid({ ... grid options ... });
然后,

Infragistics会在div#myGrid内部渲染小部件,其中包括table#myGrid_table后代。这似乎是您需要指定以过滤网格的元素。

也就是说,您要在igGrid小部件呈现的igGridFiltering上调用table,它将具有以下id = id + '_table'。假设您以正确的格式提供了过滤器myFilter,则此方法应该有效:

$('#myGrid_table').igGridFiltering("filter", myFilter);

对于(a),是的,您确实需要重新创建网格,更新列,然后重新创建网格。