検索ボックスが検索画面にある場所にドロップダウンを配置し、各エントリを異なるクエリに関連付けたいと考えています。これは私のビジネスで使用されるデータベース用であり、現在、次のような画面が多すぎます。
- すべての機器
- 新装備
- 利用可能な機器
- 販売機器
- 無給の備品
- 未払いのコミッション
2012 RC の Lightswitch V2 を使用しています。
検索ボックスが検索画面にある場所にドロップダウンを配置し、各エントリを異なるクエリに関連付けたいと考えています。これは私のビジネスで使用されるデータベース用であり、現在、次のような画面が多すぎます。
2012 RC の Lightswitch V2 を使用しています。
最初に [データ項目の追加] をクリックし、文字列型のローカル プロパティを追加します。議論のためにそれを呼んでSearchType
ください。[プロパティ] ウィンドウで、SearchType
[選択リスト] をクリックします。上でリストした値を選択リストに入力します (つまり、すべての機器、新しい機器など)。これをコントロール ツリーにドラッグすると、AutoCompleteBox になります。
テーブルと呼ぶものを右クリックしEquipment
、[クエリの追加] をクリックします。のような名前を付けEquipmentSearch
ます。Yann のリンクのステップ 2 にあるものと同様のクエリを設定します。
パラメーターを追加しますが、フィルターは追加しません。代わりに、それを呼び出して String 型にしTownId
ましょう。SearchParam
Screen Designer に戻り、Add Data Item を使用してEquipmentSearch
クエリを画面に追加します。それをツリーにドラッグして、グリッド ビューにします。
EquipmentSeach
左側のリストをクリックして展開します。次に をクリックしSearchParam
、[プロパティ] ウィンドウで、[パラメーター バインド] の下のボックスをクリックして、[.] を選択しますSearchType
。
EquipmentSearch
クエリ デザイナーでもう一度開きます。クエリ デザイナーの右上隅で、[コードの記述] の横にある矢印をクリックし、[ ] を選択しますEqupimentSearch_PreprocessQuery
。
次のようなコードを追加します。
VB.NET
Private Sub EquipmentSearch_PreprocessQuery(SearchParam As System.Nullable(Of String), ByRef query As System.Linq.IQueryable(Of LightSwitchApplication.Equipment))
Select Case SearchParam
Case "New Equipment"
query = From es In query
Where es.EquipStatus = "New"
Select es
Case "Available Equipment"
query = From es In query
Where es.EquipStatus = "Available"
Select es
Case "Sold Equipment"
query = From es In query
Where es.EquipStatus = "Sold"
Select es
Case "Unpaid Equipment"
query = From es In query
Where es.EquipStatus = "Unpaid"
Select es
Case "Unpaid Commission"
query = From es In query
Where es.EquipCommission = "Unpaid"
Select es
End Select
End Sub
C#
private void EquipmentSearch_PreprocessQuery(System.Nullable[] SearchParam, void Of, void String) {
((System.Linq.IQueryable[])(query));
Of;
LightSwitchApplication.Equipment;
switch (SearchParam) {
case "New Equipment":
query = From es In query
Where es.EquipStatus = "New"
Select es
break;
case "Available Equipment":
query = From es In query
Where es.EquipStatus = "Available"
Select es
break;
case "Sold Equipment":
query = From es In query
Where es.EquipStatus = "Sold"
Select es
break;
case "Unpaid Equipment":
query = From es In query
Where es.EquipStatus = "Unpaid"
Select es
break;
case "Unpaid Commission":
query = From es In query
Where es.EquipCommission = "Unpaid"
Select es
break;
}
「すべての機器」と他のすべての機器をそのまま通過させます。それが失敗した場合、グリッド ビューには、テーブル全体の完全でフィルター処理されていないビューが表示されます。これは、「すべての機器」の場合に必要と思われるものです。それ以外の場合は、LINQ を使用して、返された結果を好きなようにカスタマイズします。
画面クエリ プロパティを画面に追加し、デザイナーの左側から画面コントロール ツリーにドラッグすることで、複数のデータグリッドを同じ画面に配置できます。
それはあなたが求めているものですか?
編集:
「各エントリを異なるクエリに関連付ける」と、1 つの画面に複数のエンティティが必要であると思われます。
これは役に立ちますか?ComboBox フィルター検索画面の作成
Lightswitch でできることは、画面に表示されるプロパティによって決定される、クエリに割り当てられる追加のプロパティを画面で定義することです。
クエリ エディターで、通常どおり、プロパティをテーブルのフィールドに割り当てます。
表示に使用される他のプロパティを使用して、Property_Changed イベントを選択し、(embedded.kyle の例のように) 使用されているスイッチ ケースを使用して、選択内容に基づいてクエリで使用されるプロパティを割り当てます。次に、画面の作成イベントでデフォルト値を割り当てることができます。
これにより、コードは前処理クエリの外と画面のコード内に保持されます。好みの問題かもしれませんが、別のテーブルにバインドされていないテーブルを相互参照して処理するなど、必要な場合にのみ前処理クエリを使用するのが好きです。