Fork me on GitHub

Highlight (select, mark) a record(s) in Grid from X++ [AX2012]

Solutions

Highlighting all the records in a grid (including NOT loaded ones)

Let’s say we have some Control in a Form of type CheckBox, Button or StringEdit and we want it them once modified/clicked to update the form grid by selecting all the records in a grid.

To speed up form load, Dynamics AX will only display/load, say, first 20 records out of, say, 500 available, and those remaining 480 will be loaded when you scroll down the form window.

Most of the time by saying “select all”, we mean all 500 records rather then those 20 visible/loaded ones. So in order to do that, please use this function, which is applied to modified() method of Form Control.

// CheckBox Control
public boolean modified()
{
    // Not a main data source of the Form!
    InventDim    inventDimTMP;

    boolean ret;

    ret = super();

    if(CheckBoxSelectAll.value())
    {
        inventDimTMP = InventDim_DS.getFirst();

        while(inventDimTMP)
        {
            InventDim_DS.findRecord(inventDimTMP);
            InventDim_DS.mark(true);
            inventDimTMP = InventDim_DS.getNext();
        }
    }

    return ret;
}

Now, if you want to do the same, but by replicating CTRL+SHIFT+END keyboard combination and also give your users this informative warning, use this function:

// CheckBox Control
public boolean modified()
{
    boolean ret;

    ret = super();

    if(CheckBoxSelectAll.value())
    {
        // Marks first record. CTRL+SHIFT+END taskid == 2842
        element.task(2842);
        // Marks all records
        element.task(2842);
    }

    return ret;
}

Do you want to continue selecting lines and to load all lines now?

Highlighting all the records in a grid (ONLY loaded ones)

And if you only want to select records that are visible/loaded, you can use CRTL+A equivalent.

// CheckBox Control
public boolean modified()
{
    boolean ret;

    ret = super();
    #task

    if(CheckBoxSelectAll.value())
    {
        // // Marks all records. CTRL+A taskid == #taskSelectAll
        element.task(#taskSelectAll);
    }

    return ret;
}

Highlighting/selecting a specific record in a grid (including NOT loaded records)

Let’s say your records has some unique meaningful identifiers such as serial numbers and you want to select a record in a grid by typing it’s serial number in StringEdit field.

// StringEdit Control
public boolean modified()
{   
    // Not a main data source of the Form!
    InventDim    inventDimTMP;
    boolean serialFound = false;

    boolean ret;

    ret = super();

    inventDimTMP = InventDim_DS.getFirst();

    while(inventDimTMP && !serialFound)
    {
        InventDim_DS.findRecord(inventDimTMP);
        if(inventDimTMP.inventSerialId == this.valueStr()) 
        {
            InventDim_DS.mark(true); 
            serialFound = true;
        }
        inventDimTMP = InventDim_DS.getNext();
    }

    return ret;
}

Sources

  • Stoneridge Software, Lake, L., 24 March 2014, Marking Records on a Form Data source [online] Available at: http://www.stoneridgesoftware.com/ax-2012-forms-marking-records-on-a-form-data-source/ [Accessed 08 January 2015]

Comments !

links

social