Как обновить сетку данных в 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;

Пытаться mydatagrid.Items.Refresh()

Из MSDN -

CollectionViewSource.GetDefaultView(myGrid.ItemsSource).Refresh();

Свяжите Datagrid с ObservableCollection и обновите свою коллекцию.

Как насчет

mydatagrid.UpdateLayout();

Если вы хотите обновить одну строку:

Создайте новый 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);
Другие вопросы по тегам