Как получить WPF DataGrid для сохранения изменений обратно в базу данных?

Как заставить WPF DataGrid сохранять изменения обратно в базу данных?

Я привязал данные своего элемента управления DataGrid к объекту DataTable и заполнил эту таблицу очень простым запросом SELECT, который извлекает некоторую базовую информацию. Данные отлично отображаются в элементе управления.

Но когда я использую элемент управления для редактирования данных, изменения не возвращаются в БД.

Кто-нибудь знает, что мне не хватает?


person Giffyguy    schedule 21.07.2009    source источник


Ответы (1)


Выполнение обновлений

Когда пользователь редактирует данные клиентов в DataGrid, привязанный DataTable в памяти обновляется соответствующим образом. Однако эти обновления не записываются автоматически обратно в базу данных. Разработчик должен решить, когда изменения в DataTable будут записаны обратно в базу данных, в зависимости от требований приложения. Например, в некоторых случаях вы можете захотеть отправить пакет изменений с помощью кнопки «Отправить» или вы можете пожелать обновлять базу данных по мере того, как пользователь фиксирует каждое редактирование строки. Для их поддержки строки, содержащиеся в DataTable, имеют свойство RowState, которое указывает, содержат ли они изменения, которые должны быть синхронизированы с базой данных. Процесс синхронизации легко достигается с помощью метода Update TableAdapter. url: примеры WPF DataGrid

В следующем примере показано, как можно обрабатывать события RowChanged и RowDeleted, чтобы изменения в состоянии DataTable записывались в базу данных каждый раз, когда пользователь изменяет строку:

public CustomerDataProvider()
{
    NorthwindDataSet dataset = new NorthwindDataSet();

    adapter = new CustomersTableAdapter();
    adapter.Fill(dataset.Customers);

    dataset.Customers.CustomersRowChanged +=
        new NorthwindDataSet.CustomersRowChangeEventHandler(CustomersRowModified);
    dataset.Customers.CustomersRowDeleted +=
        new NorthwindDataSet.CustomersRowChangeEventHandler(CustomersRowModified);
}

void CustomersRowModified(object sender, NorthwindDataSet.CustomersRowChangeEvent e)
{
    adapter.Update(dataset.Customers);
}
person Vincent De Smet    schedule 21.07.2009