前回MTG Blog: ◆RIAサービスを使ってデータ表示2の続きで、今度はデータを更新してみる。
<データベースの更新>
レコードを更新するには
- 「RIA1」プロジェクトの「EmployeeList.xaml」を開く。
- 「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>
- 「DomainDataSource」コントロールに「SubmittedChanges」イベントハンドラーを指定する。
1: <riaControls:DomainDataSource Name="employeeDataSource"
2: QueryName="GetEmployeesQuery" AutoLoad="False"
3: SubmittedChanges="employeeDataSource_SubmittedChanges_1">
- 「EmployeeList.xaml」のコードビハインドを開く。
- 「Submit」ボタンのイベントハンドラーに以下の処理を記述する。
(更新処理中に再びクリックできないようにボタンを無効にする)1: private void submitButton_Click_1(object sender, RoutedEventArgs e)
2: {
3: submitButton.IsEnabled = false;
4: employeeDataSource.SubmitChanges();
5:
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: }
- アプリケーションを実行し「EmployeeList」を開く
- 一覧からデータを選択し、「DataFrom」の右上隅にある鉛筆のアイコンをクリックして編集モードにする
- データを修正する
(複数件修正する時はこれを繰り返す) - 「Submit」ボタンをクリックしデータベースに変更を更新する
エンティティクラスにカスタムメソッドを追加する
「EmployeeList」に表示している「Employee」テーブルは、それに対応するエンティティクラスが自動的に作られている。
今回の例で行くと、サーバー側の自動生成ソースである「RIA1.Web.g.cs」に存在している。自動生成ソースなので直接的に触るものでは無いのだが、間接的にここにメソッドを追加できるようだ。
詳しく調べたわけではないが、サービスクラス(ここではMyService.cs)の中に「Employees」クラスを引数とするメソッドを作ると「Employees」クラス自身のメソッドとして生成してくれる。
- 「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: }
- 一旦ビルドして自動生成を走らせる
- 「RIA1」クライアントプロジェクトの「EmployeeList.xaml」を開く
- 「Submit」ボタンの隣に以下のボタンを追加する
1: <Button x:Name="敬称Add" Width="75" Height="23"
2: Content="敬称追加" Click="敬称Add_Click_1" />
- コードビハインドに以下のイベントハンドラーを追加する
1: private void 敬称Add_Click_1(object sender, RoutedEventArgs e)
2: {
3: Employees emp = (Employees)(dataGrid1.SelectedItem);
4: emp.敬称Add();
5: employeeDataSource.SubmitChanges();
6: }
- アプリケーションを実行し、「Employee List」を開く
- リストから変更対象の行を選択し、「敬称追加」ボタンをクリックする
- 「LastName」に「様」が追加されるのを確認する
- 追加するメソッド自体に引数が必要な場合は、第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 件のコメント:
コメントを投稿