工夫一発!Power Appsでだんだん選択肢が増えてくドロップダウン作ってみた

早朝は数学教師!午前中はアプリ作成師!午後は施工管理技士!夕方は電気工事士!夜はコンサル!深夜はブロガー!

その名もあきらです!

そろそろ後継育てたほうがいいよ?ってよく言われたので、

上記全部出来る人募集してます!

 

さて、本日はTwitterで質問いただきましたので、

とおおおおおおおおおおい昔にこんなの作ったなぁ…と思ったので復習がてら書こうかと思います。

内容はこんな感じです↓↓↓

f:id:hanakuso365:20220119233959p:plain

 

結構抽象的でもイメージいただけると凄く作りやすいので、質問するときはなんかタイトルつけるとわかりやすいですよ!!!!(大声)

 

んじゃ作ってみます。

けどまぁコンボボックス使う必要があんまりないかなぁと思います。

 

完成形

 

ドロップボックスの選択肢がどんどん増えていくような仕様ですね

 

準備とコントロール追加

ぶっちゃけ特にないんですよね(おわり

てわけにもいかないですね、なんかワタシなんぞにわざわざDMくれたのでね

とりあえず今回SPOLだったので下のようなリスト作ります。

今回選択肢にするCategory列は一行テキストにしておいてください。

f:id:hanakuso365:20220120224025p:plain

 

そんでPower Appsの編集フォームまでの軌跡とSubmitFormでボタン作ります。

f:id:hanakuso365:20220120224550p:plain

 

そんでまぁ

CategoryっていうカードのところのDatacardを下にどかして

もともとあったところにドロップダウンコントロールを置きます。

プロパティの解除を忘れずに。

f:id:hanakuso365:20220120224906p:plain

 

そのドロップダウンに重なるように、さっきどかしたDatacardを置きます。

f:id:hanakuso365:20220120225702p:plain

必要なコントロールはこれで以上です。

 

関数の記述

あとはSPOリストから

  1. Category列を重複しないように持ってくる
  2. Collectionにぶち込む
  3. 作ったCollectionに「新しく入力する」という項目を追加する
  4. ドロップダウンのアイテムプロパティにCollectionぶち込む
  5. 「新しく入力する」という選択肢を選んだ時のみDatacardが現れるようにする

って手順を踏めばできます。

 

Category列を重複しないように持ってきてCollectionにぶちこむ

これはDistinct使えばできますね。

この画面が出た瞬間にCollectionにぶち込んであげましょう。

OnVisibleプロパティに

ClearCollect(
    colDrp,
    Distinct(
        進化するdropdown,
        Category
    ).Result
)

 

Distinct(データソース , 列名).Result

でデータソースの列名の重複を嫌って取ってきてくれます。

 

作ったCollectionに「新しく追加する」っていう選択肢を加える

今回はPatchでわざわざデータ増やしちゃってます。

まぁ別にやれればなんでもいいじゃん!の精神です。

以下を先ほどのOnVisibleの記述の後に加えてあげます。

;←これ忘れずに!

 

Patch(
    colDrp,
    Defaults(colDrp),
    {Result: "新しく入力する"}
)
)

 

これで選択肢になるCollectionができました。

 

drop downのItemsコントロールにCollectionをぶち込む

f:id:hanakuso365:20220120231208p:plain

上の画像の通りです。

ドロップダウンコントロールのItemsプロパティに先ほど生成したcolDrpをいれてあげましょう。

そして、画面を切り替えてプレビューしてみると、選択肢を生成してることがわかります。

f:id:hanakuso365:20220120231350p:plain

 

あとは「新しく入力する」をえらんだ時に、Datacardが表示されればオッケーですね。

 

Datacardにリンクさせて、表示非表示を設定する

あとはDatacardを編集してあげれば完了です。

まず表示/非表示の切り替えを、

ドロップダウンで選択した値が「新しく入力」だった場合は直打ちできるように表示に、そうでない場合は非表示にします。

 

DateCardValue.Visible
=If(
    Dropdown2.Selected.Result = "新しく入力する",
    true,
    false
)

 

そして、Defaultプロパティに

ドロップダウンで選択した値が「新しく入力」だった場合はblank、そうでない場合はドロップダウンコントロールの選択値にしてあげます。

(今回はNewFormだけ作っているので例ではParent.Defaultを使用しています)

 

DateCardValue.Default
=If(
    Dropdown2.Selected.Result = "新しく入力する",
    Parent.Default,
    Dropdown2.Selected.Result
)

 

これで新規作成も出来るドロップダウンっぽくなりました。

 

 

検証するときちんと入っていることがわかると思います。

こんな感じで似非comboboxみたいなもの作ってみました。

 

なんか質問あるときは暇ならブログかなんかで答えますので、じゃんじゃんどうぞー