我有两个简单的要求
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 :(得分: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),是的,您确实需要重新创建网格,更新列,然后重新创建网格。