Как получить Windows Forms DataGridView для отображения новых записей при привязке к EntityCollection - PullRequest
5 голосов
/ 23 января 2011

Попытка добавить новые записи в EntityCollection во время выполнения и обновить DataGridView с новой информацией.

Я пытался связать представление данных напрямую с коллекцией сущностей (т.е. ObjectSet) и через BindingSource, который связан с той же коллекцией.

Я пробовал DataGridView.Refresh (), DataGridView.EndEdit () и BindSource.ResetBindings (), но, похоже, ничего не работает.

Ответы [ 3 ]

0 голосов
/ 29 января 2011

Я застрял с той же проблемой.Microsoft должна заботиться о людях, которые используют их технологии, а EF должна заботиться о привязке данных.Хайме, если вы найдете лучший способ, пожалуйста, обновите этот список.Для меня воссоздание экземпляра контекста работает нормально для меня.Самое смешное, что отладчик показывает, что контекст сущности и источник привязки имеют последние обновления, но представление данных по-прежнему не обновляется.Спасибо

Здесь - лучшее решение, которое я нашел на данный момент -

В основном вам нужно сделать

bindingSource.DataSource = EntityContext.Collection
                               .Execute(MergeOption.AppendOnly);
0 голосов
/ 02 февраля 2012

Надеюсь, еще не поздно =) У меня есть кое-что, что работает здесь ...

// Entity Data Model
private ManagerEntities context = new ManagerEntities();

// declare private member    
private BindingList<Currency> lstCurrencies = null;

// on form load, load data and bind to DataGridView's DataSource

private void Form1_Load(object sender, EventArgs e) {

     lstCurrencies = new BindingList<Currency>();

     ObjectResult or = ((ObjectQuery)currencies).Execute(MergeOption.AppendOnly);
     foreach (Currency c in or)
         lstCurrencies.Add(c);

     // dgMain is my DataGridView
     dgMain.DataSource = lstCurrencies;
}

// this will save objects that have changed. You might want to add logic for newly created and deleted objects.
private void btnSave_Click(object sender, EventArgs e) {
    context.SaveChanges();
}
0 голосов
/ 23 января 2011

Попробуйте это:

bindingSource.DataSource = null;
bindingSource.DataSource = theCollection;

В качестве альтернативы, вы можете сохранить копию данных в памяти в BindingList<T>.Свяжите DataGridView с BindingList, а когда вы добавляете объект в ObjectSet, добавьте его и в BindingList.

...