Как обновить данные в bwu_datagrid

Я пытаюсь обновить существующую сетку данных следующим образом, но это приводит к ошибкам рендеринга, например, к появившимся строкам. Каков подходящий способ сделать это?

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();
}

2 ответа

Решение

invalidateAllRows() это еще один способ уведомить сетку, что данные изменились.

Читая пример 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();
 }
Другие вопросы по тегам