Как правильно изменить контекст при использовании DataGridView?

Я совсем запутался в этих изменениях.

Допустим, у нас есть таблица в базе данных, назовем ее Customers.

Мы получаем данные из таблицы с помощью структуры сущностей, например: List<Customers> customers = context.Customers.ToList();

У нас также есть BindingSource, и мы используем List<Customers в качестве источника данных: bindingSource1.DataSource = customers;

И в конце назначаем источник привязки как источник данных DataGridView:dataGridView1.DataSource = bindingSource1;

Теперь допустим, что мы хотим добавить нового клиента. Каков правильный способ добавления/изменения данных? Должны ли мы добавить/обновить List<Customers> и в конце просто сохранить контекст?

В то же время, как правильно отменить изменения? Предполагая, что мы используем некоторые из предложений, упомянутых здесь: Как обновить DbContext и здесь: https://code.msdn.microsoft.com/How-to-undo-the-changes-in-00aed3c4

Когда изменения в контексте отменяются (все измененные, удаленные и добавленные записи отменяются), как нам обновить DataGridView или BindingSource?

Я думаю, что мне не хватает части головоломки.


person Apostrofix    schedule 12.11.2014    source источник


Ответы (2)


Я пришел к решению, и это использовать двустороннюю привязку данных. Таким образом, все стороны будут получать уведомления, когда мы добавляем, редактируем или удаляем записи из сетки. У Microsoft есть учебник здесь ССЫЛКА, но есть и другие способы.

person Apostrofix    schedule 11.12.2014

Я думаю, что часть головоломки, которую вы упускаете, — это уровень доступа к данным. если вы раскрываете контекст внутри этого слоя, вы можете определить некоторые правила для своего кода.

Контекст->Уровень доступа к данным->Уровень представления

Таким образом, вы можете работать с контекстом по своему усмотрению. Вы можете разработать метод, который будет возвращать полную таблицу клиентов, как она есть сейчас:

 List<Customers> customers = context.Customers.ToList(); 

Но также вы можете разработать метод, который будет добавлять или изменять одного клиента в контекст и сохранять изменения:

public void UpdateCustomer (Csutomer customer)
{
    using (var ctx = new Context())
    {
        ctx.Customer.ApplyChanges(customer);
        ctx.SaveChanges(); // 
    }            
}

В этом последнем методе вы можете назначить EntityState действию и использовать:

 if (entity.EntityState == EntityState.Modified || entity.EntityState == EntityState.Deleted) 
 { 
   context.Refresh(RefreshMode.StoreWins, entity); 
 } 
 else if (entity.EntityState == EntityState.Added) 
 {  
   context.Detach(entity); 
 } 

Вы можете справиться с обновлением контекста.

Теперь осталось только решить, как запустить обновление уровня представления (DataGridView).

person MrVoid    schedule 12.11.2014