PowerAppsでSortByColumnsを使用してコレクション内にあるデータを降順表示させたかったのだが、うまくいかず躓いてしまったので、検証結果と対処方法を覚書程度に書いていきます。
もっといい方法などあれば教えていただけると助かりますm(_ _)m
↓SortByColumnsのリファレンス
やりたかったこと
- 入力されたテキストをボタン押下のアクションでコレクションに追加。
- コレクションをギャラリーで降順表示
2の降順表示が想定通りにいかず躓いてしまいました。
検証結果
予めコレクションに要素を用意しておいた時の表示結果
【設定値】
ボタン
OnSelect:Collect(Number, [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
ギャラリー(左)
Item:SortByColumns(Number,"Value",Ascending)
ギャラリー(右)
Item:SortByColumns(Number,"Value",Descending)
【操作】
ボタンを押下し、ギャラリー内にコレクションした要素を表示。
【実行結果】
・画面
ボタン押下によりコレクションに要素を追加していった際の表示結果
【設定値】
ボタン
OnSelect:Set(Counter, Counter + 1); Collect(Number, {Num:Label1.Text})
ラベル
Text:Counter
ギャラリー(左)
Item:SortByColumns(Number,"Num",Ascending)
ギャラリー(右)
Item:SortByColumns(Number,"Num",Descending)
【操作】
ボタンを押下し、コレクション内にアイテムを追加。ギャラリー内にコレクションした要素を表示。
【実行結果】
まとめ
既にコレクションされたものをSortByColumnsを用いて表示する場合は、コレクション内の要素を昇順・降順で表示できるかと思います。
対してコレクション内に画面操作などで要素を追加していった場合の、コレクションされたものをSortByColumnsを用いて表示した場合は、順序が異なるものが表示されるかと思います。
画像などはないですが、表示をギャラリーではなくリストにした場合も同様の現象がおき、ソートする要素をテキストではなくイメージとした場合も同様の現象が発生しました。気になる方は試してみて下さい。
以上より、CollectionもしくはSortByColumnsもしくはその両方の動作がおかしいのでは?と考えています。
内部でどのような動作が行われているかわからないので詳細はわかりませんが。。。
わかったらまた追記しようと思います。
対処方法
公式のリファレンスより、SortByColumnsで指定したレコードが数値であれば数値を昇順・降順で並び替えてくれるそうなので、コレクションに要素を追加する際、Noなどを同時に割り振ってあげることにより、コレクションに追加された順番を判別できるようにします。
【設定値】
ボタン
OnSelect:Set(Counter, Counter + 1); Collect(Number, {No:Counter ,Num:Label1.Text})
ラベル
Text:Counter
ギャラリー(左)
Item:SortByColumns(Number,"No",Ascending)
ギャラリー(右)
Item:SortByColumns(Number,"No",Descending)
【操作】
ボタンを押下し、コレクション内にアイテムを追加。ギャラリー内にコレクションした要素を表示。
【実行結果】
できました!!