<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.appian.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Users are able to move  Individual Rows Up and Down of a Dynamic Editable Grid</title><link>https://community.appian.com/discussions/f/general/14007/users-are-able-to-move-individual-rows-up-and-down-of-a-dynamic-editable-grid</link><description>Is it possible to achieve the users are able to move the order of rows vertically(up and down) in a dynamic editable interface?</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>RE: Users are able to move  Individual Rows Up and Down of a Dynamic Editable Grid</title><link>https://community.appian.com/thread/63516?ContentTypeID=1</link><pubDate>Tue, 18 Dec 2018 16:49:16 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:4552fa70-1a94-41ee-8b02-493f5c2e2872</guid><dc:creator>ankushj</dc:creator><description>Yes U can,,, The below code is for moving Up, similarly you can do down also&lt;br /&gt;
&lt;br /&gt;
load(&lt;br /&gt;
  local!employees: {&lt;br /&gt;
      { id: 1, firstName: &amp;quot;John&amp;quot; , lastName: &amp;quot;Smith&amp;quot; , department: &amp;quot;Engineering&amp;quot; , title: &amp;quot;Director&amp;quot; , phoneNumber: &amp;quot;555-123-4567&amp;quot; , startDate: today()-360 },&lt;br /&gt;
      { id: 2, firstName: &amp;quot;Michael&amp;quot; , lastName: &amp;quot;Johnson&amp;quot; , department: &amp;quot;Finance&amp;quot; , title: &amp;quot;Analyst&amp;quot; , phoneNumber: &amp;quot;555-987-6543&amp;quot; , startDate: today()-360 },&lt;br /&gt;
      { id: 3, firstName: &amp;quot;Mary&amp;quot;, lastName: &amp;quot;Reed&amp;quot; , department: &amp;quot;Engineering&amp;quot; , title: &amp;quot;Software Engineer&amp;quot; , phoneNumber: &amp;quot;555-456-0123&amp;quot; , startDate: today()-240 },&lt;br /&gt;
  },&lt;br /&gt;
  a!formLayout(&lt;br /&gt;
    label: &amp;quot;Example: Add,Update, or Remove Employee Data&amp;quot;,&lt;br /&gt;
    contents: {&lt;br /&gt;
      a!textField(&lt;br /&gt;
        label: &amp;quot;&amp;quot;,&lt;br /&gt;
        instructions: local!employees,&lt;br /&gt;
        readOnly: true()&lt;br /&gt;
      ),&lt;br /&gt;
      with(&lt;br /&gt;
      a!gridLayout(&lt;br /&gt;
        totalCount: count(local!employees),&lt;br /&gt;
        headerCells: {&lt;br /&gt;
          a!gridLayoutHeaderCell(label: &amp;quot;First Name&amp;quot; ),&lt;br /&gt;
          a!gridLayoutHeaderCell(label: &amp;quot;Last Name&amp;quot; ),&lt;br /&gt;
          a!gridLayoutHeaderCell(label: &amp;quot;Department&amp;quot; ),&lt;br /&gt;
          a!gridLayoutHeaderCell(label: &amp;quot;Title&amp;quot; ),&lt;br /&gt;
          a!gridLayoutHeaderCell(label: &amp;quot;Phone Number&amp;quot; ),&lt;br /&gt;
          a!gridLayoutHeaderCell(label: &amp;quot;Start Date&amp;quot;, align: &amp;quot;RIGHT&amp;quot; ),&lt;br /&gt;
          /* For the &amp;quot;Remove&amp;quot; column */&lt;br /&gt;
          a!gridLayoutHeaderCell(label: &amp;quot;&amp;quot; )&lt;br /&gt;
        },&lt;br /&gt;
        /* Only needed when some columns need to be narrow */&lt;br /&gt;
        columnConfigs: {&lt;br /&gt;
          a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight:3 ),&lt;br /&gt;
          a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight:3 ),&lt;br /&gt;
          a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight:3 ),&lt;br /&gt;
          a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight:3 ),&lt;br /&gt;
          a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight:3 ),&lt;br /&gt;
          a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight:2 ),&lt;br /&gt;
          a!gridLayoutColumnConfig(width: &amp;quot;ICON&amp;quot;)&lt;br /&gt;
        },&lt;br /&gt;
        /*&lt;br /&gt;
        * a!forEach() will take local!employee data and used that data to loop through an&lt;br /&gt;
        * expression that creates each row.&lt;br /&gt;
        *&lt;br /&gt;
        * When modifying the recipe to work with your data, you only need to change:&lt;br /&gt;
        * 1.) the number of fields in each row&lt;br /&gt;
        * 2.) the types of fields for each column (i.e. a!textField() for text data elements)&lt;br /&gt;
        * 3.) the fv!item elements. For example fv!item.firstName would change to fv!item.yourdata&lt;br /&gt;
        */&lt;br /&gt;
        rows: a!forEach(&lt;br /&gt;
          items: local!employees,&lt;br /&gt;
          expression: a!gridRowLayout(&lt;br /&gt;
            contents: {&lt;br /&gt;
              /* For the First Name Column*/&lt;br /&gt;
              a!textField(&lt;br /&gt;
                /* Labels are not visible in grid cells but are necessary to meet accessibility requirements */&lt;br /&gt;
                label: &amp;quot;first name &amp;quot; &amp;amp; fv!index,&lt;br /&gt;
                value: fv!item.firstName,&lt;br /&gt;
                saveInto: fv!item.firstName,&lt;br /&gt;
                required: true&lt;br /&gt;
              ),&lt;br /&gt;
              /* For the Last Name Column*/&lt;br /&gt;
              a!textField(&lt;br /&gt;
                label: &amp;quot;last name &amp;quot; &amp;amp; fv!index,&lt;br /&gt;
                value: fv!item.lastName,&lt;br /&gt;
                saveInto: fv!item.lastName,&lt;br /&gt;
                required:true&lt;br /&gt;
              ),&lt;br /&gt;
              /* For the Department Column*/&lt;br /&gt;
              a!dropdownField(&lt;br /&gt;
                label: &amp;quot;department &amp;quot; &amp;amp; fv!index,&lt;br /&gt;
                placeholderLabel: &amp;quot;-- Select -- &amp;quot;,&lt;br /&gt;
                choiceLabels: { &amp;quot;Corporate&amp;quot;, &amp;quot;Engineering&amp;quot;, &amp;quot;Finance&amp;quot;, &amp;quot;Human Resources&amp;quot;, &amp;quot;Professional Services&amp;quot;, &amp;quot;Sales&amp;quot; },&lt;br /&gt;
                choiceValues: { &amp;quot;Corporate&amp;quot;, &amp;quot;Engineering&amp;quot;, &amp;quot;Finance&amp;quot;, &amp;quot;Human Resources&amp;quot;, &amp;quot;Professional Services&amp;quot;, &amp;quot;Sales&amp;quot; },&lt;br /&gt;
                value: fv!item.department,&lt;br /&gt;
                saveInto: fv!item.department,&lt;br /&gt;
                required:true&lt;br /&gt;
              ),&lt;br /&gt;
              /* For the Title Column*/&lt;br /&gt;
              a!textField(&lt;br /&gt;
                label: &amp;quot;title &amp;quot; &amp;amp; fv!index,&lt;br /&gt;
                value: fv!item.title,&lt;br /&gt;
                saveInto: fv!item.title,&lt;br /&gt;
                required:true&lt;br /&gt;
              ),&lt;br /&gt;
              /* For the Phone Number Column*/&lt;br /&gt;
              a!textField(&lt;br /&gt;
                label: &amp;quot;phone number &amp;quot; &amp;amp; fv!index,&lt;br /&gt;
                placeholder:&amp;quot;555-456-7890&amp;quot;,&lt;br /&gt;
                value: fv!item.phoneNumber,&lt;br /&gt;
                saveInto: fv!item.phoneNumber&lt;br /&gt;
              ),&lt;br /&gt;
              /* For the Start Date Column*/&lt;br /&gt;
              a!dateField(&lt;br /&gt;
                label: &amp;quot;start date &amp;quot; &amp;amp; fv!index,&lt;br /&gt;
                value: fv!item.startDate,&lt;br /&gt;
                saveInto: fv!item.startDate,&lt;br /&gt;
                required:true,&lt;br /&gt;
                align: &amp;quot;RIGHT&amp;quot;&lt;br /&gt;
              ),&lt;br /&gt;
              /* For the Removal Column*/&lt;br /&gt;
              a!imageField(&lt;br /&gt;
                label: &amp;quot;delete &amp;quot; &amp;amp; fv!index,&lt;br /&gt;
                images: a!documentImage(&lt;br /&gt;
                  document: a!iconIndicator(&amp;quot;MOVE_UP&amp;quot;),&lt;br /&gt;
                  altText: &amp;quot;Remove Employee&amp;quot; ,&lt;br /&gt;
                  caption: &amp;quot;Remove &amp;quot; &amp;amp; fv!item.firstName &amp;amp; &amp;quot; &amp;quot; &amp;amp;  fv!index,&lt;br /&gt;
                  link: a!dynamicLink(&lt;br /&gt;
                    value: fv!index,&lt;br /&gt;
                    saveInto: {&lt;br /&gt;
                      if(fv!index =1,&lt;br /&gt;
                      {},&lt;br /&gt;
                      {&lt;br /&gt;
                        a!save(local!employees,insert(local!employees,fv!item,fv!index-1)),&lt;br /&gt;
                        a!save(local!employees, remove(local!employees, fv!index+1))&lt;br /&gt;
                      }                     &lt;br /&gt;
                      )&lt;br /&gt;
                    }&lt;br /&gt;
                  )&lt;br /&gt;
                ),&lt;br /&gt;
                size: &amp;quot;ICON&amp;quot;&lt;br /&gt;
              )&lt;br /&gt;
            },&lt;br /&gt;
            id: fv!index&lt;br /&gt;
          )&lt;br /&gt;
        ),&lt;br /&gt;
        addRowlink: a!dynamicLink(&lt;br /&gt;
          label: &amp;quot;Add Employee&amp;quot;,&lt;br /&gt;
          /*&lt;br /&gt;
           * For your use case, set the value to a blank instance of your CDT using&lt;br /&gt;
           * the type constructor, e.g. type!Employee(). Only specify the field&lt;br /&gt;
           * if you want to give it a default value e.g. startDate: today()+1.&lt;br /&gt;
           */&lt;br /&gt;
          value: {&lt;br /&gt;
            startDate: today() + 1&lt;br /&gt;
          },&lt;br /&gt;
          saveInto: {&lt;br /&gt;
            a!save(local!employees, append(local!employees, save!value))&lt;br /&gt;
          }&lt;br /&gt;
        ),&lt;br /&gt;
        rowHeader: 1&lt;br /&gt;
      )&lt;br /&gt;
      )&lt;br /&gt;
    },&lt;br /&gt;
    buttons: a!buttonLayout(&lt;br /&gt;
      primaryButtons: a!buttonWidget(&lt;br /&gt;
        label: &amp;quot;Submit&amp;quot;,&lt;br /&gt;
        submit: true&lt;br /&gt;
      )&lt;br /&gt;
    )&lt;br /&gt;
  )&lt;br /&gt;
)&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>