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

ただし、リロード後、データグリッドのすべての行が古くなります。これは、変更を加える前のことです。何が問題ですか?

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 に答える