今回は、ギャラリーやデータテーブルをドロップダウンを使用して絞り込む方法を紹介します。
この記事では、【Power Apps】コレクション操作でよく使用する関数まとめで使用したデータテーブルを使用しています。
※この記事の方法では委任不可であるため、正しくデータが検索できない場合があります。
ギャラリーやデータテーブルを検索する
データソースやコレクション内のデータを検索する際には文字列で検索することが可能であり、その文字列の指定先にドロップダウンを選択することができます。
ドロップダウンを設置
データテーブルコントロールの下にドロップダウンを設置して検索できるようにしてみます。
ドロップダウンコントロールのItemsに以下のように入力します。
["iPhone","iPad","Mac"]
これで単一列のテーブルが作成され、ドロップダウンでiPhone,iPad,Macから選択できるようになりました。
データテーブルの設定
ドロップダウンコントロールで選択した項目によってデータテーブルコントロールのレコードが検索されるように、データテーブルコントロールのItemsプロパティを変更していきます。
Search(Apple製品一覧_コレクション,
Dropdown1.SelectedText.Value,
"Title")
このように入力することで、Search関数によってドロップダウンで選択したテキスト値で検索出来ます。
ただし、SharePointリストの選択肢列のように選択肢が存在する列は検索できません。
また、ドロップダウンを使用して絞り込みが出来るようになりましたが、すべてのレコードを閲覧することが出来なくなってしまいました。
トグルコントロールを使用してすべてのレコード⇔ドロップダウンからの検索を切り替える
トグルコントロールを使用してすべてのレコードとドロップダウンからの検索を切り替えられるように設定していきます。
ドロップダウンコントロールのOnChangeに以下のように入力します。
Set(_Var1,Self.SelectedText.Value)
これでドロップダウンの選択肢を選択するごとにvar1という変数にその値が代入されるようになります。
そして、切り替え(トグル)コントロールを設置して選択している項目を検索条件に含めるかどうかを指定できるようにします。
各プロパティを以下のように設定してください。
OnCheck | Set(_Var1,Dropdown1.SelectedText.Value) |
OnUncheck | Set(_Var1,"") |
Default | If(_Var1<>"",true) |
TrueText | "検索条件に含める" |
FalseText | "検索条件に含めない" |
そして、データテーブルコントロールのItemsプロパティをvar1変数で検索するように変更します。
Search(Apple製品一覧_コレクション,
_Var1,
"Title"
)
これでドロップダウンコントロールで選択した値を使用しつつ、トグルがオフの時にはデータテーブルコントロールにすべての値を表示することが出来ます。
複数条件で絞り込み
同様にドロップダウンと切り替えコントロールを2つ以上設置してギャラリーやデータテーブルを検索する方法を紹介します。
shiftキーを押しながらドロップダウンコントロールと切り替えコントロールを選択して、Ctrl+C,Ctrl+Vでコピペします。
すると中身のプロパティが同じコントロールが作成されるので、その中身を少し変更していきます。
新しいドロップダウンコントロールのプロパティを以下のように設定します。
新しいコントロールでは、var2という変数を使用します。
Items | ["Air","Pro"] |
OnChange | Set(_Var2,Self.SelectedText.Value) |
そして、新しい切り替えコントロールのプロパティを以下のように設定します。
OnCheck | Set(_Var2,Dropdown1_1.SelectedText.Value) |
OnUncheck | Set(_Var2,"") |
Default | If(_Var2<>"",true) |
TrueText | "検索条件に含める" |
FalseText | "検索条件に含めない" |
最後に、データテーブルコントロールのItemsプロパティを以下のように変更します。
Search(
Search(Apple製品一覧_コレクション,
_Var1,
"Title"),
_Var2,
"Title"
)
これで複数条件で絞り込むことが出来るようになりました。
最後に
今回紹介した方法は、Search関数が空のテキスト値を受け取った時にすべてのレコードを返すという特性を利用しています。
また、この方法が利用できる検索対象はテキスト値が入力されているデータソース列のみになります。
SharePointリストなどで選択肢列を設定している場合は、テキスト列に変更してPower Apps側で選択肢入力しかできないようにする工夫をすれば、この方法が利用できるようになります。
IfやSwitchを使用して条件分岐をする方法もありますが、こちらの方が入れ子が少なく済むと思います(もっといい方法があればぜひ教えてください)。
コメント