Get selected records in a grid on a form AX - X++
To get selected record(s) in a grid in AX, we use the MultiSelectionHelper class. To achieve that, follow the steps below:1. Create a command button on the form and override the clicked method.
2. Insert the code below:
void clicked()
{
MultiSelectionHelper selectionHelper = MultiSelectionHelper::construct();//Create instance of class
Set selectedRecords = new Set(Types::Record);//Declare a set of type record
MyLinesTable tableLines; //Your table buffer
super();
selectionHelper.parmDataSource(MyLinesTable_DS); //Set the datasource
tableLines = selectionHelper.getFirst(); //assign to table buffer the reference to selected record(s)
if (tableLines.RecId)
{
while (tableLines)
{
selectedRecords.add(tableLines);
info(strFmt('Selected record.. %1',tableLines.myField));//Display selected record
tableLines = selectionHelper.getNext();
}
}
}
3. Select record(s) on the grid then click on the command button to view the selected records.
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;
}
// 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;
}
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;
}
No comments:
Post a Comment