2

我正在尝试以以下方式刷新现有数据网格,但这会导致呈现错误,例如仍然出现的行。这样做的适当方法是什么?

void onData( Map<String,Data> data_ ){
  if( identical(data,data_) ) return;
  data = data_;
  if( provider == null ){
    provider = new MapDataItemProvider();
    grid.setup(dataProvider: dataProvider, columns:columns, gridOptions: gridOptions);
  }else{
    dataProvider.items.clear();
  }
  data.forEach( (k,v) => provider.add( toMapped(k,v) );
  grid.render();
}
4

2 回答 2

2

阅读 DataView 示例,似乎除了 render() 之外还有一些调用。

  • grid.invalidateRows(e.changedRows);
  • grid.updateRowCount();
  • grid.invalidateAllRows()

但最好的方法可能是invalidate() Duh。

添加后invalidate(),网格正在正确重绘......

void onData( Map<String,Data> data_ ){
  if( identical(data,data_) ) return;
  data = data_;
  if( provider == null ){
    provider = new MapDataItemProvider();
    grid.setup(dataProvider: dataProvider, columns:columns, gridOptions: gridOptions);
  }else{
    dataProvider.items.clear();
  }
  data.forEach( (k,v) => provider.add( toMapped(k,v) );
  grid.invalidate();
}

来自github bwu_datagrid的无效代码

void invalidate() {
  updateRowCount();
  invalidateAllRows();
  render();
 }
于 2014-09-14T15:48:13.683 回答
2

invalidateAllRows()是另一种通知网格数据已更改的方法。

于 2014-09-14T15:49:45.373 回答