Как обновить сетку данных в WPF
Мой источник находится в базе данных MySQL, я сделал команду обновления, и теперь мне нужно обновить мой DataGrid
,
MySqlCommand cmd = new MySqlCommand(
"update request set status = " + StatusRequest(value) +
" where id = " + rowView[0].ToString() + "", conn);
MySqlDataReader myReader = cmd.ExecuteReader();
Как мне освежить мой DataGrid
?
8 ответов
Перезагрузите источник данных вашей сетки после обновления
myGrid.ItemsSource = null;
myGrid.ItemsSource = myDataSource;
Из MSDN -
CollectionViewSource.GetDefaultView(myGrid.ItemsSource).Refresh();
Свяжите Datagrid с ObservableCollection и обновите свою коллекцию.
Если вы хотите обновить одну строку:
Создайте новый ObservableCollection и инициализируйте его
public ObservableCollection<myModel> myObservableCollection { get; set; } = new ObservableCollection<myModel>();
Обновить строку
//Get current row as your model
var row = myDataGrid.CurrentItem as myModel;
//Find in your collection index of selected row
var b = myObservableCollection.IndexOf(myObservableCollection.FirstOrDefault(e=>e.Id == row.Id));
//Create a copy of this row
var k = row.Clone() as myModel;
//Here you can mofidy what you want
k.Name = "New name";
k.SomethingId = 2137;
//Replace object in you collection
myObservableCollection[b] = k;
Вот код для клонирования вашей модели
public object Clone()
{
return this.MemberwiseClone();
}
У меня было много проблем с этим, и именно это помогло мне перезагрузить DataGrid с новыми значениями. Убедитесь, что вы используете тип данных, из которого вы получаете данные, чтобы получить последние значения данных.
Я представлял это с SomeDataType
ниже.
DataContext.Refresh(RefreshMode.OverwriteCurrentValues, DataContext.SomeDataType);
Надеюсь, это поможет кому-то с теми же проблемами, что и у меня.
Используйте это, чтобы обновить DataGrid в Wpf.
TableAdapter.Fill(DataSet.TableName);