Power Community

Power Community

Shift numbered items in a gallery by more than one row

image

There are many posts on reordering a gallery with up/down buttons, but what if you want to shift an item a large number of places and re-order everything in between in one action ? The assumption here is that the gallery contains a sequential numeric field, is sorted by this field and the user wants to change a row item to another position with the result that the gallery will then be sorted in the new order.
Firstly, there are two possibilities on the number shift – it could be larger or smaller than its original position, so that needs to be dealt with separately. I have also allowed for there being no other unique identifier (such as the ID) in the record, so will use the number field only. There are four basic actions required

  • Capture the old and new positions before anything is moved.
  • Get the item to be moved “out of the way”.
  • Add or subtract 1 from the position of the rows “in between” the old and new numbers.
  • Put the shifted row into its new position.

So the resulting code – using a Text Input for the RowNo field and this OnChange of that control

With(
   {
      wOld: ThisItem.RowNo,
      wNew: Value(Self.Text)
   },
   Patch(
      DataSource,
      ThisItem,
      {RowNo: 0}
   );
   If(
      wOld > wNew,
      ForAll(
         Filter(
            Sort(
               DataSource,
               RowNo,
               SortOrder.Descending
            ),
            RowNo >= wNew && RowNo < wOld
         ) As aOrder,
         Patch(
            DataSource,
            LookUp(
               DataSource,
               RowNo = aOrder.RowNo
            ),
            {RowNo: aOrder.RowNo + 1}
         )
      ),
      wNew > wOld,
      ForAll(
         Filter(
            Sort(
               DataSource,
               RowNo
            ),
            RowNo <= wNew && RowNo > wOld
         ) As aOrder,
         Patch(
            DataSource,
            LookUp(
               DataSource,
               RowNo = aOrder.RowNo
            ),
            {RowNo: aOrder.RowNo - 1}
         )
      )
   );
   Patch(
      DataSource,
      LookUp(
         DataSource,
         RowNo = 0
      ),
      {RowNo: wNew}
   )
)

achieves these four steps and re-orders the gallery

This post was originally published on this site

- Advertisement -spot_img

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisement - Advertisement

Latest News

Enhance Competitor Analysis with Integrated Maps within Dynamics 365 CRM

“Keep your Friends Close but your Enemies Closer”- Sun Tzu In a business, it is not just about sincerity but...

More Articles Like This

- Advertisement -spot_img