0

我在我的软件中使用工作单元和存储库模式。表单上有一个 dataGridView,它从下一个方式获取数据:

acceptedBonusesGrid.DataSource = _unitOfWork.DocumentRepository.GetDocumentsInfo();

GetDocumentsInfo 位于 DocumentRepository 中。GetDocumentsInfoes - 是带有连接的复杂视图:

public IQueryable<GetDocumentsInfo> GetDocumentsInfo()
{
     return _context.GetDocumentsInfoes;
}

当用户双击记录时,会出现编辑该记录的表单。我将工作单元发送到表格:

CorrectionAcceptedForm corrForm = new CorrectionAcceptedForm(_unitOfWork, docNum);

表单打开,工作单元的链接正在使用中:

public CorrectionAcceptedForm(UnitOfWork unitOfWork, int docNum)
{
    InitializeComponent();
    _unitOfWork = unitOfWork;

    _documentData = _unitOfWork.DocumentRepository.GetById(docNum);

    AssignValues();
}

用户在记录中进行更改并保存更改:

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();
        }
    }
}

当此更正表单关闭时,主表单上的数据网格会重新加载:

acceptedBonusesGrid.DataSource = null;
acceptedBonusesGrid.Columns.Clear();
acceptedBonusesGrid.DataSource = _unitOfWork.DocumentRepository.GetDocumentsInfo();

但是在重新加载之后 - datagrid 中的所有行都是旧的,那是在进行更改之前。问题是什么?

4

1 回答 1

0

3个月后我发现了问题。GetDocumentsInfo() 必须是这样的:

    public IQueryable<GetDocumentsInfo> GetDocumentsInfo()
    {
        _context.GetDocumentsInfoes.MergeOption = MergeOption.OverwriteChanges;
        return _context.GetDocumentsInfoes;
    }

现在,当我在子表单中进行更改时,我的 DataGrid 会更新。

于 2012-12-05T10:58:20.147 回答