画面の流れ
業務アプリケーションにおける代表的な画面の流れは「リスト絞込みの条件入力画面(ダイアログ)」→「リスト画面(リストデータ画面)」→「詳細画面(単体データ画面)」となります。そして多くのシーンでリスト画面で変更したいデータを詳細画面で表示し、詳細画面で変更を保存するとリスト画面のデータも書き換わっているという連携が発生します。
画面の流れのサンプル |
YWorks Software Framework(以下、YWSFと呼びます)では、変更になった詳細データの内容をリストに反映するためにYCDbListクラスにRefreshRowメソッドを用意しています。YCDbListサブクラスにおいて、リストデータの内容を書き換えるようにRefreshRowメソッドをオーバーライド(サブクラスでの実装)してください。下記にサンプルを示します。
//追加・変更データをリストに反映します。 public override void RefreshRow(YCDbObject dbObject) { DataRow row = null; try { int index = this.StringDataToIndex(dbObject.KeyColumnName, dbObject.KeyCode); //対象オブジェクトが新規追加レコードの場合はインデックス番号がない if (index != YCDatabaseConst.NO_INDEX) { row = this.Table.Rows[index]; } else { row = this.NewRow; } row["ユーザID"] = dbObject["ユーザID"]; row["ユーザ名"] = dbObject["ユーザ名"]; row["ユーザ名カナ"] = dbObject["ユーザ名カナ"]; row["パスワード"] = dbObject["パスワード"]; row["ユーザグループ名"] = ((YCUserForRegistration)dbObject).UserGroupName; row["削除フラグ"] = dbObject["削除フラグ"]; if (index == YCDatabaseConst.NO_INDEX) this.Table.Rows.Add(row); row = null; } catch (Exception e) { row = null; throw e; } }
RefreshRowメソッドには詳細が変更されたレコード情報がYCDbObjectオブジェクトとして引数に与えられます。まずはリスト内に同じ主キーデータを持つレコードがないか確認します。あればそのレコードのインデックス番号が取得できます。(新規追加レコードの場合はインデックス番号がありません。)
インデックス番号が分かれば対象となるレコードが取得できますので、内容を引数で与えられたYCDbObjectオブジェクトの内容に沿って書き換えるとリスト画面の表示データも変更されます。