Wijmo FlexGrid неправильно выравнивает числа после изменения columnDef и обновления itemsSource - PullRequest
0 голосов
/ 14 мая 2018

У нас есть приложение 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...