PowerApps│ギャラリーで複数アイテムの選択に対応させる方法

こんにちは、あんこ先生です。

ギャラリーも、選択肢用のコントロールとして使う方法があります。

リストボックスよりも情報が多く、アイテムを展開した状態を維持できるので便利ですよね。

さらに画像や計算結果も扱えるので、アイデア次第で用途は無限に広がります。

ただ、ギャラリーは複数選択に対応していないため、ちょっと使いにくい場面もあります。

そこで、今回はギャラリーで複数アイテムの選択に対応させる方法をコード付きで紹介します。

この記事を読めば、選択肢の候補がひとつ増えますよ。

ギャラリーコントロールって何?という方は先にこちらの記事をオススメします。

ギャラリーで複数アイテムの選択に対応させる方法


作成物の仕様

サンプルは商品名と値段だけで構成されたデータソースとします。

列数が増えてもやることは変わりませんよ。

nameprice
いちご150
みかん220
りんご110
パイナップル300
メロン1000

リストボックスのようにアイテムが展開され、かつ複数選択に対応させます。

選択状態のアイテムは背景色を変えます。

また、選択状態のアイテムをテーブルとして返します。


実装方法

作り方は2通りあります。

①選択させたいデータソースにflag列を追加してコレクション化する

②ギャラリーで選択したアイテムを別コレクションに格納する

どちらも一長一短ですが、選択するだけなら①がかんたんです。

戻り値を使ってまとめて更新したい場合は、列情報が一致している②がオススメです。

それぞれの具体的な作成方法を解説していきますね。

データソースをコレクション化│パターン①

選択することに意義がある場合はコチラがオススメです。

作り方は4ステップとシンプルです。

まず、選択肢にしたいデータソースに、選択判定に使うflag列を追加してコレクション化します。

ClearCollect(データソース,AddColumns(コレクション,"flag",false))

次に、そのコレクションをギャラリーに展開します。

//Gallery.Items
コレクション

そして、アイテムを選択する都度、flag列の値を反転させます。

//Gallery.OnSelect
Patch(コレクション,ThisItem,{flag:!ThisItem.flag})

最後に、背景色用の図形を用意して表示条件をflag列にすれば完成です。

//Rectangle.Visible
ThisItem.flag

動作として、アイテムを選択するとflag列がtrueに変わり、背景色用の図形が表示されます。

もう一度選択するとflag列がfalseに変わり、背景色用の図形が非表示になります。

戻り値を利用する場合は、flag列を条件にFilter関数で絞るだけです。

Filter(Gallery.AllItems,flag)

戻り値をコレクション化│パターン②

こちらは戻り値を使ってまとめてデータソースを更新する際に便利です。

作り方はこちらも4ステップです。

まず、元データソースの空コレクションを作成します。

Defaults関数を使うとかんたんです。

//データソースの初期値を1レコードだけ登録
ClearCollect(コレクション,Defaults(データソース));
//空レコードをクリア
Clear(コレクション)

次に、元データソースをギャラリーに展開します。

//Gallery.Items
コレクション

そして、アイテムを選択する都度、コレクションに登録済みなら削除、そうでないなら格納していきます。

//Gallery.OnSelect
If(ThisItem in コレクション,
    Remove(コレクション,ThisItem),
    Patch(コレクション,Defaults(コレクション),ThisItem)
)

最後に、背景色用の図形を用意して表示条件をコレクション内に当アイテムがあるかにすれば完成です。

//Rectangle.Visible
ThisItem in コレクション

動作として、アイテムを選択するとコレクションに登録済みか確認します。

登録済みなら削除、登録されていなければ登録します。

その結果、コレクションに登録されていれば背景色用の図形が表示されます。

戻り値は元データソースと同じ列情報のため、一括登録や削除などが容易に行えますよ。

Filter(Gallery.AllItems,flag)

ちょっと難解ですが、Patch関数を用いた一括登録手順はこちらの記事をご覧ください。

ギャラリーで複数アイテムの選択に対応させる方法のまとめ

今回は、ギャラリーで複数アイテムの選択に対応させる方法を紹介しました。

普通に使うも良し、応用すれば選択したアイテムを順にフォームで入力させることもできますよ。

また、入れ子になっているPlannerのアサイン情報やチェックリストの更新にも便利です。

この辺は需要があれば記事にまとめていきますね。

ご支援よろしくおねがいします

この記事を気に入ってくださった方、寄付してあげてもいいよという方がいらっしゃっいましたら、ご支援いただけると助かります。

下記リンクからAmazonギフト券で、金額は15円からお気持ちを入力してください。

受取人のメールアドレスは amazon@anko7793.com までお願いします。

メッセージもいただけるとたいへん喜びます。

よろしくお願いします。

Amazonギフト券(Eメールタイプ) 

2件のコメント

初めまして!
工場のライン業務から急にDX化グループに転属して頭が爆発しそうなサラリーマンです。
質問とかって受け付けてますかね・・・?
めちゃくちゃ複雑で自分ではどうしようもないのでお知恵を借りたいのですがどうでしょうか・・・?

こんにちは!
記事に関するかんたんなものならお答えしますよ
込み入った内容であれば、相談チケットがありますのでそちらをご利用ください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
七草あんこ
非IT系中間管理職やってます。社命によりoffice365を主軸とした業務改善プロジェクトメンバーに任命されたことでPowerAppsと出会えました。いまではビジネス・プライベートを問わず、欠かせないツールになっています。導入初期やアプリ作成時に遭遇した諸問題の解決法とサンプルアプリの作り方を紹介していきます。主にTwitterで情報収集しているので不明点など呟いているとお邪魔するかもしれません。