2012-06-22 4 views
1

У меня есть DataGrid, который привязан к DataTable («LastDatasets»)DataGrid привязан к DataTable не освежающих ценности

Когда я обновить DataTable в таймере с помощью этого кода:

if (LastDatasets != null) 
{ 
    var maxRow = LastDatasets.Select("id = MAX(id)").FirstOrDefault(); 

    var newds = dataInterface.ReadFromDatabase("SELECT * FROM daten WHERE id > " + dataInterface.SqlSep + "id LIMIT 30", new Dictionary<string, object>() {{"id", maxRow["id"]}}); 

    if (newds != null && newds.Rows.Count > 0) 
    { 
     LastDatasets.Merge(newds); 
    }    
} 

Мои DataTable содержит мои новые данные, но DataGrid в WPF не обновляется!

ответ

0

После чтения новых данных называют

DataGrid.Refresh(); 
+1

Это не лучшим решением, потому что тогда вся DataGrid получает redrawed, но я только хотел что изменения сделаны. Потому что весь перерисовка очень медленная! –

-1

Объект DataTable не реализует INotifyPropertyChanged так что это не путь для вашего DataGrid, чтобы получать уведомления при изменении свойства. Если бы вы привязали свой DataGrid к коллекции объектов, которые подняли событие PropertyChanged всякий раз, когда свойство было изменено, вы увидите, что ваши значения обновляются. Я считаю, что ваши решения должны делать то, что говорит Ask, и Refresh - содержимое вашего DataGrid или привязать DataGrid к коллекции объектов, которые реализуют INotifyPropety Changed вместо DataTable.

Еще одна вещь, которую стоит попробовать: enable virtualization на DataGrid. По умолчанию виртуализация строк должна быть включена, но вы можете дважды проверить, установив EnableRowVirtualization = True. Дополнительно установите EnableColumnVirtualization = true.

+0

Вы когда-либо связывали данные, привязанные к datagrid wpf? он работает как charme, потому что привязан к datagrid как BindingListCollectionView, и это, конечно же, имеет INotifyPropertyChanged. – blindmeis

+0

Когда DataRow модифицирован, он вызывает EndEdit(), который, в свою очередь, вызывает SetNewRecord в DataTable. Затем DataTable поднял событие OnRowChanged, которое уведомляет DataView и обновляет привязку. DataTable не внедряет INotifyPropertyChanged, и одно значение ячейки не может быть обновлено только рядом. –

1

Я использую простое связывание, и я могу видеть все изменения после .Merge(). поэтому вы должны опубликовать еще несколько кода, чтобы увидеть, что происходит не так.

<DataGrid ItemsSource="{Binding MyDataTable}" /> 

vm.cs

MyDataTable.Merge(newdata); 
0

Если вы используете связывание затем использовать как этот

ItemsSource="{Binding yourdatasource,IsAsync=True, Mode=TwoWay}" 
Смежные вопросы