2015-05-03 4 views
0

У меня есть вид сетки данных, данные которого источник получает назначен список элементов после следующей функции от нагрузки:DataGridView не обновляется после редактирования в C#

public void refreshGrid(object sender, FormClosingEventArgs e) 
{ 
    dgvItems.SuspendLayout(); 
    itemBindingSource.SuspendBinding(); 
    List<Item> items = db.Items.ToList(); // db is MyContext db = new MyContext(); 
    itemBindingSource.DataSource = items; 
    dgvItems.DataSource = null; 
    dgvItems.DataSource = itemBindingSource; 
    itemBindingSource.ResumeBinding(); 
    dgvItems.ResumeLayout(); 
} 

private void AllItemsForm_Load(object sender, EventArgs e) 
{ 
    refreshGrid(); 
} 

и есть кнопка редактирования, которая выполняет следующие действия по щелчку:

private void btnEditItem_Click(object sender, EventArgs e) 
{ 
    Item item = (Item)dgvItems.SelectedRows[0].DataBoundItem; 
    var editForm = new EditItemForm(item); 
    editForm.FormClosing += new FormClosingEventHandler(refreshGrid); 
    editForm.Show(); 
} 

т.е. открывает форму редактирования и присваивает refreshGrid() его закрытия мероприятия.

На этой форме редактирования у меня есть эта Save кнопки, которая делает это:

private void btnSave_Click(object sender, EventArgs e) 
    { 
     Item itemEdited = db.Items.Where(i => i.itemId == itemEditing.itemId).Single(); 
     itemEdited.categoryId = (int)cbxCategory.SelectedValue; 
     itemEdited.description = tbxDescription.Text; 
     itemEdited.price = (Double)nudPrice.Value; 
     db.Entry(itemEdited).State = EntityState.Modified; 
     db.SaveChanges(); 
     this.Close(); 
    } 

элемент редактирование работает, но очевидно, только после закрытия и повторного открытия формы редактирования, то есть того refreshGrid() метода, который был назначен его закрытие не работает!

Как это исправить?

+0

Это не работает или его не называют? Какое неправильное поведение вы испытываете? Исключение? Неверные данные? –

+0

@PaoloCosta, я думаю, что он не вызывается, потому что тот же метод работает для моего 'AddForm'. Или проблема связана с классом Conity EntityFramework. Может быть, он сохраняется после вызова метода refresh. Никаких исключений, неверных данных. Все работает нормально, за исключением того, что представление datagrid не обновляется, если оно не закрыто и не открыто – Jorj

ответ

0

Я нашел свою собственную ошибку. Ошибка заключалась в использовании двух разных экземпляров класса Context.

Решение было добавить:

SomsaContext database = new SomsaContext(); // i.e. new instance of Context class 

прямо перед обновления происходит.