I use Unit of Work and Repository patterns in my software.
There is a dataGridView on form and it gets data from next way:
acceptedBonusesGrid.DataSource = _unitOfWork.DocumentRepository.GetDocumentsInfo();
GetDocumentsInfo is in DocumentRepository. GetDocumentsInfoes – is complex view with joins:
public IQueryable<GetDocumentsInfo> GetDocumentsInfo()
{
return _context.GetDocumentsInfoes;
}
When user double-clicks on record, it’s form for editing this record appears. I send unit of work to form:
CorrectionAcceptedForm corrForm = new CorrectionAcceptedForm(_unitOfWork, docNum);
Form opens and link to unit of work is in use:
public CorrectionAcceptedForm(UnitOfWork unitOfWork, int docNum)
{
InitializeComponent();
_unitOfWork = unitOfWork;
_documentData = _unitOfWork.DocumentRepository.GetById(docNum);
AssignValues();
}
User makes changes in the record and saves changes:
private void SaveBill(int billId)
{
if (ValidateChildren())
{
SaveSupplierAddress();
Bill billData = _documentData.Bills.FirstOrDefault(bill => bill.BillId == billId);
if (billData != null)
{
billData.Description = descriptionTextbox.Text;
billData.Price = Convert.ToDecimal(priceTextbox.Text.Replace('.', ','));
_unitOfWork.Save();
}
}
}
When this correction form closes, then datagrid on main form reloads:
acceptedBonusesGrid.DataSource = null;
acceptedBonusesGrid.Columns.Clear();
acceptedBonusesGrid.DataSource = _unitOfWork.DocumentRepository.GetDocumentsInfo();
But after reload – all rows in datagrid are old, that was before making changes.
What is the problem?
After 3 months I have discovered problem.
GetDocumentsInfo() has to be like this:
Now my DataGrid updates when I make changes in child form.