Как получить WPF DataGrid для сохранения изменений обратно в базу данных? - PullRequest
9 голосов
/ 21 июля 2009

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

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

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

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

1 Ответ

16 голосов
/ 21 июля 2009

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

Когда пользователь редактирует данные клиентов в DataGrid, связанная таблица данных в памяти обновляется соответствующим образом. Однако эти обновления автоматически не записываются обратно в базу данных. Разработчик должен решить, когда изменения в 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);
}
...