@tayutayu

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PowerAppsで、入力ボックスのTextをボタンで設定する方法

解決したいこと

PowerAppsでアプリをつくっています。
・入力ボックスのTextをボタンアイテムを押下したときに書き換えたいです。
・ギャラリー内に配置されている入力ボックスのDefaultには、SharePointのデータが初期値として取り込まれます。
・ギャラリー画面で取り込んだ値を変更して一気にアップロードすることはできていますが、
 ユーザーの利便性を高めるため、ボタンを押したら決まった値を入力ボックスに入れたいです。
 (○だったら10、×だったら0)

sample.png

どのように実現すればよいのかわからず困っています。助けて頂けないでしょうか。

自分で試したこと

ギャラリーの外でテキスト入力とぼたんを用意していろいろ試してみました。

sample.png

・試したこと1
ギャラリーの外に入力ボックスTextInputとボタンを配置し
ボタンのOnSelectプロパティに

UpdateContext({TextInput:10});

と記述しましたが、エラーは出ないのですが、10も入りませんでした。

・試したこと2
ボタンのOnSelectプロパティに

UpdateContext({TextInput.Text:10});

と記述するとエラー(コロンが必要)になりました。
sample.png

・試したこと3
入力ボックスTextInputのDefaultに変数varを設定し、ボタンのOnSelectに

UpdateContext({var:10});

を設定すると、Default値が10に設定されると同時に、
1回だけ入力ボックスのTextも10になりました。
どうやら、Defaultに設定している変数の値が変化すると、Textの値も書き換わるようです。
そして、Textが10に設定された後、入力ボックスの値を操作することもできたので一瞬喜んだのですが・・・
その後にボタンを押しても、10は2度と入りませんでした。
どうやらDefaultに設定されている値が10から10に代わるだけで変化しないので、Textが書き換わらないようです。

・試したこと4
それならばということで、試したこと3に追加して、入力ボックスのOnChangeに

UpdateContext({var:0});

と記述してみました。これで、入力ボックスの値を変えたら、Defaultが0になるので、ボタンで10が設定できるだろうと・・・。
ところがやってみると、10は入るようになりましたが、入力ボックスの値を変更した瞬間に値が0に置き換わってしまうようになってしまいました。
当然ですね。入力ボックスのDefault値が書き換わったので、0がTextに入ってしまったようです・・・。

シンプルに、ボタンを押したとき
入力ボックスのTextを10に設定することはできないのでしょうか?

そして、更にややこしいのですが、入力ボックスとボタンがギャラリーの中にある場合、
どのように指定すればよいでしょうか?

ThisItemを使うのか?とも思ったのですが、
ThisItemはギャラリーのデータ要素は候補に出てきますが
入力ボックスTextInputは候補に出てきません・・・

何か別の書き方があるのか?
そもそもギャラリー内のアイテムの指定は出来ないのか?
どう調べたらよいのかわからず困っております。

次善の策として、
ギャラリーからレコードを選択したら、そのレコードだけの編集画面を開いてそこで編集すればよいと考える方がいらっしゃるかもしれません。
むしろそれが正しいPowerAppsの作り方だと・・・
ただ・・・私が作成しているアプリケーションの場合、レコード数が多いので、
1レコード毎にいちいち編集画面に移動するのは、ユーザーの同意を得られないだろうと危惧しています。

長々と申し訳ありません。
どなたかわかる方がいらっしゃいましたら、ご教授の程よろしくお願い申し上げます。

0 likes

1Answer

以下でどうでしょうか。

1.App の OnStart に変数をセット(この例では、Text1

scr1.png

2.テキストボックスの Default に変数を指定する

scr2.png

3.○ボタンの OnSelect で、変数に 10 を入れる

scr3.png

4.×ボタンの OnSelect で、変数に 0 を入れる

scr4.png

5.run

run.gif

0Like

Comments

  1. @tayutayu

    Questioner

    @nak435
    ご返信、誠にありがとうございます。
    おっしゃる通り、テキストボックスのDefaultに変数を設定して、ボタンSelectで切り替えることで、テキストボックスのtextが切り替わります。
    しかしながら大変申し訳ないのですが今回、ギャラリー内のテキストボックスのDefaultに変数を設定をすると、変数が1つなのでギャラリーのすべてのテキストボックスが変更されてしまいます。個々に○×を付けていきたいのです。
    ギャラリー内でそのような動きを実現するためには、ボタンをSelectしたときにギャラリー内のアイテムのTextプロパティに値を設定するしかないのかな?と考えているのですが、その指定方法が全く分からず困っております。
    ギャラリーのSelectedも試したのですが、エラーで動作してくれません。

    UpdateContext({ギャラリー名.Selected.テキスト入力コントロール名.txt:"10"});
    

    sample.png
    もし解決策をご存じでしたら、教えて頂けると幸いです。

  2. 変数が1つなのでギャラリーのすべてのテキストボックスが変更されてしまいます。

    複数あるテキストボックスごとに、変数を分けることはできないのでしょうか?
    テキストボックスごとに、○ボタン、×ボタンがあるので、設定する変数は一意ですよね。

    mov.gif

  3. ボタンをSelectしたときにギャラリー内のアイテムのTextプロパティに値を設定するしかないのかな?

    UpdateContext関数はコンテキスト変数の更新であって、コントロールプロパティの設定には使えないようです。
    他にも調べてみましたが、変数経由か、データソース経由での更新で、見つかりませんでした。

  4. @tayutayu

    Questioner

    お調べ頂き本当にありがとうございます。
    教えていただいた方法だと、ギャラリーの外であれば問題なく実現できますね。
    ですが、ギャラリーの中で使おうとすると少し問題があると思っていまして・・・。

    テキスト入力コントロールのDefaultに変数varまたはvar2を設定し、
    ボタンのOnSelectに下記を設定します。

    UpdateContext({var:0}); //捨てset(直接テキスト入力コントロールのTextを編集した場合、Defaultが10のままだと、効かないので一旦0にしてから次の行で10をsetすると確実に10が入る。)
    UpdateContext({var:10});
    

    もしくは

    set(var2,0); //捨てset(直接テキスト入力コントロールのTextを編集した場合、Defaultが10のままだと、効かないので一旦0にしてから次の行で10をsetすると確実に10が入る。)
    set(var2,10);
    

    どちらの変数でやっても、ギャラリーにある個々のテキスト入力コントロールの値が、
    ボタンを押したときに一斉に10になってしまいます。
    本当は選択しているコントロールの値だけ変更したいのです。

    ただ、お調べ頂いた内容で、コントロールプロパティは直接設定できないとなると困りました。
    ギャラリー内でアイテム1つ1つで有効な変数のようなものがあればよいのですが・・・
    それがThisItemやSelectedでの指定だと思っていたのに、それが使えないとなると・・・

  5. ギャラリーの中で使おうとすると少し問題があると思っていまして・・・。

    ギャラリーということは、何らかデータソースと連携した一覧ということですね。
    すみません、完全にはずしていました。

    ○ボタン、×ボタンを押した時に、データソースを更新してよいなら、Patch関数が使えそうな気がしますが、試す環境がないので未実施/未確認です。

  6. @tayutayu

    Questioner

    情報提供いただきありがとうございます。
    おかげ様で、たった今、希望の動きが実現できました!

  7. 解決してよかったです。
    Patch関数で実現できたということでしょうか。
    当Q&Aをクローズしていただいて結構です。

Your answer might help someone💌