我正在使用ui-grid - v3.0.0-rc.22 - 2015-06-15。
它配置为使用外部排序,工作正常。
现在我需要使用选择框从外部更改已排序的列。在选择框的每次更改时,它都会触发外部排序,并且网格中的数据会正确更新。它还会更新gridOptions.columnDefs:它将除正确的列之外的所有列的排序对象设置为undefined并更新已排序的列。
但是有一个问题,当前排序的列指示符(在列标题中)没有按原样更新。
我尝试使用gridApi.core.notifyDataChange()和" options"或"柱"作为参数值,但它也没有工作。 如何以编程方式更新ui-grid中的排序指标?
以下是选择框触发的代码的一部分:
function updateSortColumn() {
if ($rootScope.QuickSearch.sortBy !== undefined) {
$scope.gridOptions.columnDefs.forEach(function (col) {
if (col.field === $rootScope.QuickSearch.sortBy) {
col.sort = {
direction: $rootScope.QuickSearch.sortOrder,
priority: 0
};
}
else
{
col.sort = undefined;
}
});
}
if($scope.gridApi !== undefined)
{
$scope.gridApi.core.notifyDataChange( uiGridConstants.dataChange.OPTIONS );
$scope.gridApi.core.notifyDataChange( uiGridConstants.dataChange.COLUMN );
}
}
答案 0 :(得分:5)
您可以使用ui-grid的“sortColumn”函数,如下所示:
$scope.gridApi.grid.sortColumn(column, directionOrAdd, add)
这是此函数的源代码:ui-grid source code
在你的例子中,它会给出这样的东西: function updateSortColumn() {
if ($rootScope.QuickSearch.sortBy !== undefined) {
$scope.gridOptions.columnDefs.forEach(function (col) {
if (col.field === $rootScope.QuickSearch.sortBy) {
$scope.gridApi.grid.sortColumn(col,$rootScope.QuickSearch.sortOrder);
}
});
}
}
$ rootScope.QuickSearch.sortOrder必须在(uiGridConstants.ASC | uiGridConstants.DESC)中。您无需提供它。
答案 1 :(得分:1)
我遇到了同样的问题 - 在我的案例中,解决方案是Gho5t在关于这个问题的另一个答案的评论中提到的。
我添加了此响应,因此解决方案可以提供更多可见性(以及更完整的代码示例)。
我需要一种方法来挂钩网格上的排序事件,并通过同一列对页面上的其他网格进行排序(它们都具有相同的列定义)。
我错误地将gridOptions.colDefinition
对象传递给sortColumn()
方法,并且列标题排序指示符未更新。
grid.column
对象是sortColumn()
方法所寻求的对象,并使事情按预期工作。
// sortColumns is an array of column objects that gets passed in when a grid column is sorted (this code only considers the first sorted column)
// secondGridObj is an object defined elsewhere that has a reference to another grid's gridApi object
gridApi.core.on.sortChanged(null, function (grid, sortColumns) {
if (sortColumns.length) {
var sortDirection = (sortColumns[0].sort) ? sortColumns[0].sort.direction || uiGridConstants.ASC : uiGridConstants.ASC;
var matchingColumn = _.find(secondGridObj.gridApi.grid.columns, function (v2) { return v2.field === sortColumns[0].field; });
if (matchingColumn) {
secondGridObj.gridApi.grid.sortColumn(matchingColumn, sortDirection, false)
.then(function() {
secondGridObj.gridApi.grid.notifyDataChange(uiGridConstants.dataChange.COLUMN);
});
}
}
});