更改columnDef和更新itemsSource后,Wijmo FlexGrid无法正确对齐数字

时间:2018-05-14 10:32:07

标签: angular wijmo

我们有一个Angular 5应用程序,我们使用FlexGrid来显示各种数据集。这些数据集可以由不同的视图表示,这些视图是预定义的列集。每次视图更改时,都会更新columnDef并替换itemsSource。现在,如果我们正常加载页面,所有单元格都正确对齐,我们的布尔值显示为复选框。每当我们改变视图时,我们就会失去数字列的对齐,而我们的布尔值只是纯文本的真或假。

我尝试了刷新数据或网格(itemsSource.refresh,dataGrid.invalidate等)的各种方法,但似乎没有任何方法可以纠正对齐。有没有办法手动完成,或者我们是否以错误的方式设置dataSource?

代码:

以下是我们加载columnDef的方法:

<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.')
  );
}

以下是我们更新itemsSource的方法:

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时重置选择。

0 个答案:

没有答案