У нас есть приложение Angular 5, в котором мы используем FlexGrid для отображения различных наборов данных. Эти наборы данных могут быть представлены различными представлениями, которые являются предопределенными наборами столбцов. Каждый раз, когда изменяется представление, columnDef обновляется, и наш itemsSource заменяется. Теперь, если мы загрузим нашу страницу нормально, все ячейки выровняются правильно, и наши логические значения будут показаны как флажки. Всякий раз, когда мы меняем наше представление, мы теряем выравнивание для числовых столбцов, и наши логические значения - просто текст true или false.
Я пытался всеми способами обновить данные или сетку (itemsSource.refresh, dataGrid.invalidate и т. Д.), Но, похоже, ничего не исправило выравнивание. Есть ли способ сделать это вручную, или мы неправильно настраиваем наш источник данных?
Код:
Вот как мы загружаем нашу колонкуDef:
<wj-flex-grid etc...>
<wj-flex-grid-column
*ngFor="let col of columnDefs"
[binding]="col.binding"
[header]="col.caption"
[width]="col.width"
>
</wj-flex-grid-column>
</wj-flex-grid>
И JavaScript:
private getLayout(): void {
this.layoutService.get(this.dataName).subscribe(
(result: ViewDef) => {
this.caption = result.caption;
this.columnDefs = result.columnDefs;
},
() => console.log('Could not load layout.')
);
}
Вот как мы обновляем наш источник:
private setItemsSource(result) {
this.dataGrid.beginUpdate();
const scrollPos = this.dataGrid.scrollPosition;
if (this.selectNextBeforeUpdate) {
this.selectNext();
}
// save selected and collapsed state
const selectedRows = [];
const collapsedRows = [];
this.dataGrid.rows.forEach(row => {
if (row.dataItem) {
if (row.isSelected) {
selectedRows.push(row.dataItem.id);
}
if (row instanceof GroupRow && row.isCollapsed) {
collapsedRows.push(row.dataItem.id);
}
}
});
const idCurrentItem = this.idCurrentItem;
this.dataGrid.itemsSource = new CollectionView(result);
if (idCurrentItem) {
this.dataGrid.rows.forEach(row => {
if (row.dataItem.id === idCurrentItem) {
this.dataGrid.selection = new CellRange(row.index, this.dataGrid.selection.col);
}
});
}
// restore collapsed and selected state
this.dataGrid.rows.deferUpdate(() => {
this.dataGrid.rows.forEach(row => {
if (row instanceof GroupRow && collapsedRows.indexOf(row.dataItem.id) > -1) {
row.isCollapsed = true;
}
if (selectedRows.indexOf(row.dataItem.id) > -1) {
row.isSelected = true;
}
});
});
this.dataGrid.scrollPosition = scrollPos;
this.initializeHeader();
if (this.selectNextAfterUpdate) {
this.selectNext();
}
this.dataGrid.endUpdate();
}
У нас есть дополнительный код, чтобы сохранить наш выбор, так как Wijmo сбрасывает выбор при изменении CollectionView.