0

Gridview でデータを更新しようとしているときに問題が発生しました。アプリを実行していて、データベースで何かを更新すると、新しいデータは更新されませんが、アプリを閉じて再実行すると、変更が表示されます。

コンストラクターのコードは次のとおりです。

IQueryable<GyLoadCarrier> loadCarrierQuery = queryRepository.GetGyLoadCarriers();

        LoadCarriersMfsTransportsLoader = new WcsDomainCollectionViewLoader<GyLoadCarrier>(loadCarrierQuery)
        {
            RequestTotalItemCount = true
        };

        LoadCarriersMfsTransportsLoader.LoadStarted += OnLoadCarrierMfsTransportsLoaderLoadStarted;
        LoadCarriersMfsTransportsLoader.LoadCompleted +=OnLoadCarrierMfsTransportsLoaderLoadCompleted;

        AvailableLoadCarriers = new DomainCollectionView<GyLoadCarrier>(LoadCarriersMfsTransportsLoader,
                                                                        LoadCarriersMfsTransportsLoader.Data);
        LoadCarriersMfsTransportsLoader.View = AvailableLoadCarriers;

        INotifyCollectionChanged notifyingSortLoadCarrierDestination = AvailableLoadCarriers.SortDescriptions;
        notifyingSortLoadCarrierDestination.CollectionChanged += (sender, e) => AvailableLoadCarriers.MoveToFirstPage();

        using (AvailableLoadCarriers.DeferRefresh())
        {
            AvailableLoadCarriers.PageSize = 30;
            AvailableLoadCarriers.MoveToFirstPage();
        }

LoadCarriersMfsTransportsLoader.Load("LoadCarrierAddressChanged");

そして、更新コマンドは次のとおりです。

 protected override void OnRefresh()
    {

        MfsTransportsLoader.Load(Resources.Strings.LoadingMfsTransportsProgressMessage);
    }

では、なぜこれが起こっているのでしょうか??

4

1 に答える 1

3

クライアントから DataServiceContext (または派生) クラスの同じインスタンスを使用して同じクエリを 2 回 (更新の前後に) 実行すると仮定すると、これは MergeOption (http://msdn.microsoft.com/en- us/library/system.data.services.client.dataservicecontext.mergeoption.aspx)。デフォルト値の AppendOnly は、クライアント側のオブジェクトが既に存在するため、クライアント側のオブジェクトに更新が適用されるのを防ぎます (これは、行った可能性のある変更を上書きしないためです)。おそらく、DataServiceContext.MergeOption を OverwriteChanges に設定することで、これを修正できます。

于 2012-05-21T17:17:13.800 に答える