ページ

2012年11月2日金曜日

◆RIAサービスを使ってデータを更新

前回MTG Blog: ◆RIAサービスを使ってデータ表示2の続きで、今度はデータを更新してみる。

<データベースの更新>

レコードを更新するには

  1. 「RIA1」プロジェクトの「EmployeeList.xaml」を開く。
  2. 「DataForm」コントロールの下に以下のXAMLを追加して、「Submit」ボタンを追加する。
       1: <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Margin="0,12,0,0">
       2:     <Button x:Name="submitButton" Width="75" Height="23" 
       3:             Content="Sbumit" Click="submitButton_Click_1" />
       4: </StackPanel>

  3. 「DomainDataSource」コントロールに「SubmittedChanges」イベントハンドラーを指定する。


       1: <riaControls:DomainDataSource Name="employeeDataSource" 
       2:             QueryName="GetEmployeesQuery" AutoLoad="False" 
       3:             SubmittedChanges="employeeDataSource_SubmittedChanges_1">

  4. 「EmployeeList.xaml」のコードビハインドを開く。
  5. 「Submit」ボタンのイベントハンドラーに以下の処理を記述する。
    (更新処理中に再びクリックできないようにボタンを無効にする)


       1: private void submitButton_Click_1(object sender, RoutedEventArgs e)
       2: {
       3:     submitButton.IsEnabled = false;
       4:     employeeDataSource.SubmitChanges();
       5:     
       6: }

  6. 「SubmitChanges」イベントハンドラーに以下の処理を記述する。
    (更新処理が正常に完了したか確認し、「Submit」ボタンを有効に戻す。


       1: private void employeeDataSource_SubmittedChanges_1(
       2:     object sender, SubmittedChangesEventArgs e)
       3: {
       4:     if (e.HasError)
       5:     {
       6:         MessageBox.Show(string.Format(
       7:             "Changes were not saved: {0}", e.Error.Message));
       8:         e.MarkErrorAsHandled();
       9:     }
      10:     submitButton.IsEnabled = true;
      11: }

  7. アプリケーションを実行し「EmployeeList」を開く
  8. 一覧からデータを選択し、「DataFrom」の右上隅にある鉛筆のアイコンをクリックして編集モードにする
  9. データを修正する
    (複数件修正する時はこれを繰り返す)
  10. 「Submit」ボタンをクリックしデータベースに変更を更新する
    image






エンティティクラスにカスタムメソッドを追加する


「EmployeeList」に表示している「Employee」テーブルは、それに対応するエンティティクラスが自動的に作られている。
今回の例で行くと、サーバー側の自動生成ソースである「RIA1.Web.g.cs」に存在している。自動生成ソースなので直接的に触るものでは無いのだが、間接的にここにメソッドを追加できるようだ。


詳しく調べたわけではないが、サービスクラス(ここではMyService.cs)の中に「Employees」クラスを引数とするメソッドを作ると「Employees」クラス自身のメソッドとして生成してくれる。



  1. 「RIA1.Web」プロジェクトの「MyService.cs」を開き、以下のメソッドを追加する。


       1: public void 敬称Add(Employees current)
       2: {
       3:     // Start custom workflow here
       4:     this.ObjectContext.Employees.AttachAsModified(current);
       5:     if (current.LastName.EndsWith("様"))
       6:     {
       7:         current.LastName = current.LastName.Substring(0,current.LastName.Length - 1);
       8:     }
       9:     else
      10:     {
      11:         current.LastName += "様";
      12:     }
      13: }

  2. 一旦ビルドして自動生成を走らせる

  3. 「RIA1」クライアントプロジェクトの「EmployeeList.xaml」を開く

  4. 「Submit」ボタンの隣に以下のボタンを追加する


       1: <Button x:Name="敬称Add" Width="75" Height="23" 
       2:         Content="敬称追加" Click="敬称Add_Click_1" />

  5. コードビハインドに以下のイベントハンドラーを追加する


       1: private void 敬称Add_Click_1(object sender, RoutedEventArgs e)
       2: {
       3:     Employees emp = (Employees)(dataGrid1.SelectedItem);
       4:     emp.敬称Add();
       5:     employeeDataSource.SubmitChanges();
       6: }

  6. アプリケーションを実行し、「Employee List」を開く

  7. リストから変更対象の行を選択し、「敬称追加」ボタンをクリックする

  8. 「LastName」に「様」が追加されるのを確認する
    image

  9. 追加するメソッド自体に引数が必要な場合は、第1引数のエンティティクラスに続けて指定すれば良さそうである。


       1: public void 敬称Add(Employees current,string surfix)
       2: {
       3:     // Start custom workflow here
       4:     this.ObjectContext.Employees.AttachAsModified(current);
       5:     if (current.LastName.EndsWith(surfix))
       6:     {
       7:         current.LastName = current.LastName.Substring(0,current.LastName.Length - 1);
       8:     }
       9:     else
      10:     {
      11:         current.LastName += surfix;
      12:     }
      13: }



       1: private void 敬称Add_Click_1(object sender, RoutedEventArgs e)
       2: {
       3:     Employees emp = (Employees)(dataGrid1.SelectedItem);
       4:     emp.敬称Add("殿");
       5:     employeeDataSource.SubmitChanges();
       6: }

0 件のコメント:

コメントを投稿

私が最近チェックした記事