ホーム > Silverlight, WCF RIA Services > WCF RIA Services:データ更新/キャンセル/再取得

WCF RIA Services:データ更新/キャンセル/再取得

WCF RIA Servicesで作成したサンプルはデフォルトでDataGird上でのデータの修正が可能です。
ただ、DataPagerを利用してページングを行っている場合、データを修正すると下図のようにページ番号がグレーアウトし、ページの移動ができなくなります。

 image

この状態を解消し、ページの移動を可能にするには、データの修正をキャンセルするか、データベースにたいして修正内容を更新する必要があります。

キャンセルボタンと更新ボタンを追加します。

image_3

キャンセルボタンのCommandプロパティの下図のボタンをクリックし、「データバインドの適用」を選択します。

image_4 

表示されるダイアログ上でソースとして「ElementName」-「PersonDomainDataSource」を選択します。

image_5

パスとして「RejectChangesCommand」を選択します。

image_6

更新ボタンは同様にCommandプロパティにソースとして「ElementName」-「PersonDomainDataSource」、パスとして「SubmitChangesCommand」を設定します。

この状態でデバッグを実行すると、アプリケーションを開始した時点ではキャンセルボタン、更新ボタンともに実行できない状態になっています。

image_7

データを修正すると、キャンセルボタン、更新ボタンが有効になります。

image_8

キャンセルボタンを押すと、修正内容が破棄され、ページの移動が可能になります。
更新ボタンを押すと、修正内容がデータベースに反映され、ページの移動が可能になります。

これで普通にデータ更新が可能になるのですが、いろいろと試していると他からデータが更新された場合、その内容が反映されないことがわかりました。

アプリケーションを実行し、Silverlight上からuser1のデータを修正します。

image_9

更新ボタンを押す前にデータベース上のuser2のデータを修正します。

image_10

この状態で更新ボタンを押すと、user1のデータは正しく書き換えられますが、user2の変更はSilverlight側には適用されません。

image_11

image_12 

データベース上の最新状態をSilverlight側に反映させるには、データを再取得するしか方法がなさそうです。
再取得ボタンを追加し、Commandプロパティにソースとして「ElementName」-「PersonDomainDataSource」、パスとして「LoadCommand」を設定します。

image_13

これで大丈夫、、、と思ったのですが、実行してもSilverlight側にはデータベースで直接修正した内容がやっぱり反映されません。
いろいろ調べてみると、どうやらLoadBehaviorを変更する必要がありそうです。
この変更のタイミングとして、PersonDomainDataSourceのLoad時(LodingDataイベント)が使えるようです。

まずドキュメントアウトラインからDomainDataSourceを選択します。

image_14

PersonDomainDataSourceのイベントからLoadingDataをダブルクリックし、イベント発生時のメソッドを追加します。

image_15

personDomainDataSource_LoadingDataメソッド内で、LoadBehaviorの設定を変更します。

image_16 

この設定の変更をすることで、はじめてSilverlight側でデータを再取得した際にデータベース上の修正内容が反映されるようになります。

カテゴリー:Silverlight, WCF RIA Services
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。