Windows Forms: привязки обновления работают только для добавленных элементов, а не для обновленных. - PullRequest
1 голос
/ 24 ноября 2011

Я хочу создать кнопку отмены:

private void btn_Undo_Click(object sender, EventArgs e)
{
    m_storesBS.DataSource = _storeRepository.GetAll();
    StoresBindingNavigator.BindingSource.ResetBindings(false);
}

Это хорошо работает, когда я добавляю элемент и затем нажимаю кнопку отмены.

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

Вид сетки и текстовое поле оба связаны с источником привязки (m_storesBS)

Редактировать:

Я попытался изменить тип списка метода GetAll без успеха:

public virtual BindingList<T> GetAll()
{
    return _objectSet.ToBindingList();
}

Ответы [ 2 ]

0 голосов
/ 24 ноября 2011

Проблема заключалась в том, что EF кэшировал весь мой список (_storeRepository.GetAll();).

Теперь я использую метод в моем хранилище, который называется Refresh.

public void Refresh(T entity, bool storeWins = true)
{
    _objectContext.Refresh(
       storeWins ? RefreshMode.StoreWins : RefreshMode.ClientWins, entity);
}

Кнопка отмены:

private void btn_Undo_Click(object sender, EventArgs e)
{
    var store = GetCurrentStore();
    _storeRepository.Refresh(store);
    StoresBindingNavigator.BindingSource.ResetBindings(false);
}

Этим я заставляю EF обращаться к базе данных.

0 голосов
/ 24 ноября 2011

Вы должны использовать BindingList<YourType> для привязки данных к вашему элементу управления.Изменения будут отражены без дополнительной работы.

...