LightSwitchファーストタッチ1(画面関連)
Lightswitchを少し触ったので気づいた点をメモ。
まずは、画面関連、操作感については、Lightswitch特有な操作性があること、部分的にSilverlightの画面を含めるのは簡単*1という印象
型変換できない値の入力
数値項目にアルファベットを入力すると入力エラーではなく元のデータに強制的に戻される。戻された旨のメッセージがツールチップに表示される
存在しない日付や、AutoCompleteも同じ
検索ボタンの利用
既定では検索が自動的に実行される。入力条件後に実行したい場合、画面デザイナの左ペインのクエリのプロパティを表示して、クエリの自動実行をオフにする
あとはボタンを追加し検索する処理を追加する。検索処理はクエリのLoadメソッドを呼び出せばOK。
楽観ロック競合時の動き
競合の解決のための仕組みが組み込まれている。データが競合した場合にユーザがどのデータを利用するか選択できる
この動作を避けたい場合はSaveErrorでエラーを先にハンドリングする
partial void EditableCustomersGrid_SaveError(Exception exception, ref bool handled) { if (exception is ConcurrencyException) { this.ShowMessageBox("他のユーザーがデータを変更したため登録できません"); handled = true; } }
データ競合Screenのカスタマイズは難しそう
『参考資料』
利用できる標準コントロール(拡張追加は可能)
・String・Integr・Decimal、Double型 テキストボックスとラベルが利用可能
各値が選択肢を持っている場合、オートコンプリートボックス、モーダルウインドウピッカーが利用可能
Decimal型は小数桁数を指定できる
・Boolean型 チェックボックス、テキストボックスとラベル
・DateTime型、Date型、Money型は専用のコントロールとテキストボックスとラベルが利用可能
各値が選択肢を持っている場合、オートコンプリートボックス、モーダルウインドウピッカーが利用可能
DateTime型、Date型は長い日付を指定するとyyyy年MM月dd日表示
Money型はデータに小数桁数、通貨記号などを指定可能
・その他、Binay・Guid・PhoneNumber・Email、複合データ用に住所・テキストと画像など、レイアウト用にタブやモーダルウインドウなどがある
カスタムコントロールの利用
SilverlightのUserControlを組み込む事も簡単に実装できる。ただし、LightSwitchからはデータバインドするデータのパスを指定できるぐらい。カスタムコントロール追加時にパス(インテリセンスが効く)を指定する。
同じソリューションにSilverlightのライブラリを追加して管理すると簡単。
コントロールの追加
カスタムコントロールではなくLightSwitchに新しくコントロールに追加することもできる。すでにいくつか提供されている。
・LightSwitch Suite of Controls (ComboBox、 SQL Server Reporting Services Control 、Splitter Layouts、PDF Viewer )
http://archive.msdn.microsoft.com/SpursoftLSControls
・Infragistics NetAdvantage for LightSwitch (グラフなどのリッチなコントロールを用意。free versionもあり、Masked Editorが含まれている)
http://www.microsoft.com/visualstudio/en-us/lightswitch/extensions/infragistics
これ以外にはもっとアプリよりのレポート用やOLAP用などのコントロールもいろいろある。LightSwitchの思想からいえばこれらを利用してコードを書かないのが理想的な開発シナリオなのかもしれない。
関連データの表示
「他の画面データ」を追加して関連データを指定する
計算されたプロパティを利用する方法もある。関連データをコード上で取得し利用する方法。ただし、計算されたプロパティは遅延ロード処理される可能性があるので処理のタイミングでサーバーアクセスする可能性があるので注意。
画面遷移
画面を表示するためのメソッド「Show画面名」がApplicationクラスに定義されるので利用する。引数を利用する場合、遷移先の画面にローカルプロパティを追加してパラメーターであるをチェックする。
なお、モーダルウインドウは画面遷移というよりは別ウインドウで一部のデータを表示するという意味付け。OpenModalWindowやCloseModalWindowで制御、画面を指定する引数は画面内のコントロール名を利用する
*1:使いすぎるのはLightswitchを利用した意味がなくなるかも