1

検索ボックスが検索画面にある場所にドロップダウンを配置し、各エントリを異なるクエリに関連付けたいと考えています。これは私のビジネスで使用されるデータベース用であり、現在、次のような画面が多すぎます。

  • すべての機器
  • 新装備
  • 利用可能な機器
  • 販売機器
  • 無給の備品
  • 未払いのコミッション

2012 RC の Lightswitch V2 を使用しています。

4

3 に答える 3

3

最初に [データ項目の追加] をクリックし、文字列型のローカル プロパティを追加します。議論のためにそれを呼んで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 を使用して、返された結果を好きなようにカスタマイズします。

于 2012-07-16T17:43:46.347 に答える
1

画面クエリ プロパティを画面に追加し、デザイナーの左側から画面コントロール ツリーにドラッグすることで、複数のデータグリッドを同じ画面に配置できます。

それはあなたが求めているものですか?

編集:

各エントリを異なるクエリに関連付ける」と、1 つの画面に複数のエンティティが必要であると思われます。

これは役に立ちますか?ComboBox フィルター検索画面の作成

于 2012-07-16T03:21:24.433 に答える
1

Lightswitch でできることは、画面に表示されるプロパティによって決定される、クエリに割り当てられる追加のプロパティを画面で定義することです。

クエリ エディターで、通常どおり、プロパティをテーブルのフィールドに割り当てます。

表示に使用される他のプロパティを使用して、Property_Changed イベントを選択し、(embedded.kyle の例のように) 使用されているスイッチ ケースを使用して、選択内容に基づいてクエリで使用されるプロパティを割り当てます。次に、画面の作成イベントでデフォルト値を割り当てることができます。

これにより、コードは前処理クエリの外と画面のコード内に保持されます。好みの問題かもしれませんが、別のテーブルにバインドされていないテーブルを相互参照して処理するなど、必要な場合にのみ前処理クエリを使用するのが好きです。

于 2013-08-28T14:55:31.760 に答える