When working with Syncfusion GridGroupingControl, you may need to simulate the selection of multiple grid rows. You can then perform various operations over the selected rows, for example, obtain their cell values, copy their data to the clipboard, and so on. Note that multi-selection in GridGroupingControl is only possible if the grid’s Table.TableOptions.ListBoxSelectionMode
is “MultiSimple” or “MultiExtended”. If you are not sure whether the tested grid control supports multi-selection, ask the tested application’s developer. You can also check this yourself by trying to select multiple grid rows with Ctrl- or Shift-clicks.
The following sections describe approaches that can be used to select multiple rows in the GridGroupingControl:
To perform these actions, TestComplete should have access to internal objects, properties and methods of the GridGroupingControl object. For this purpose, the .NET Application Support and Syncfusion Systems Control Support plugins must be installed and enabled. The latter lets you work with the GridGroupingControl controls using methods and properties of the SyncfusionEssGrid object. Without this plugin, you will not be able to work with controls using their internal methods and properties.When testing Syncfusion GridGroupingControl controls, use specific methods and properties of the corresponding |
Simulating Selections With Mouse
Normally, the users can select multiple rows in the GridGroupingControl by pressing Ctrl or Shift while selecting the rows. Holding Ctrl while selecting the row will add it to the current selection, and holding Shift will extend selection to the selected row.
To simulate a click on a row indicator, use the ClickRowIndicator
action of the SyncEssGrid
object. The parameters of these actions specify the row to be clicked, and also whether the Shift, Ctrl, Alt or combination of these keys should be pressed during the click.
Below is an example that illustrates how you can use these actions to select multiple rows and a range of rows in the grid.
Example
JavaScript, JScript
function Main ()
{
var p, Grid, RowIndexes;
// Obtain the grid object
p = Sys.Process("MultipleRecordSelection");
p.WinFormsObject("Form1").Maximize();
Grid = p.WinFormsObject("Form1").WinFormsObject("gridGroupingControl1");
// Select rows 7-21 in the root table
SelectRange (Grid, 7, 21);
aqUtils.Delay (1000);
// Select multiple rows in a nested table
Grid.Expand(4);
RowIndexes = new Array (1, 2, 4, 7, 14);
SelectRows (Grid.wChildView(4,0), RowIndexes);
}
// Selects the specified range of rows
function SelectRange (View, StartRowIndex, EndRowIndex)
{
// Select the first row of the range
View.ClickRowIndicator (StartRowIndex);
// Extend the selection
View.ClickRowIndicator (EndRowIndex, skShift);
}
// Selects the specified rows
function SelectRows (View, RowIndexes)
{
// Select the first of the specified rows
View.ClickRowIndicator (RowIndexes[0]);
// Add other rows to the selection
for (var i=1; i<RowIndexes.length; i++)
View.ClickRowindicator (RowIndexes[i], skCtrl);
}
Python
def Main ():
# Obtain the grid object
p = Sys.Process("MultipleRecordSelection")
p.WinFormsObject("Form1").Maximize()
Grid = p.WinFormsObject("Form1").WinFormsObject("gridGroupingControl1")
# Select rows 7-21 in the root table
SelectRange (Grid, 7, 21)
aqUtils.Delay (1000)
# Select multiple rows in a nested table
Grid.Expand(4)
RowIndexes = list(1, 2, 4, 7, 14)
SelectRows (Grid.wChildView[4,0], RowIndexes)
# Selects the specified range of rows
def SelectRange (View, StartRowIndex, EndRowIndex):
# Select the first row of the range
View.ClickRowIndicator (StartRowIndex)
# Extend the selection
View.ClickRowIndicator (EndRowIndex, skShift)
# Selects the specified rows
def SelectRows (View, RowIndexes):
# Select the first of the specified rows
View.ClickRowIndicator (RowIndexes[0])
# Add other rows to the selection
for i in range(1, RowIndexes.length-1):
View.ClickRowindicator (RowIndexes[i], skCtrl)
VBScript
Sub Main
Dim p, Grid, RowIndexes
' Obtain the grid object
Set p = Sys.Process("MultipleRecordSelection")
p.WinFormsObject("Form1").Maximize
Set Grid = p.WinFormsObject("Form1").WinFormsObject("gridGroupingControl1")
' Select rows 7-21 in the root table
Call SelectRange (Grid, 7, 21)
aqUtils.Delay (1000)
' Select multiple rows in a nested table
Grid.Expand(4)
RowIndexes = Array (1, 2, 4, 7, 14)
Call SelectRows (Grid.wChildView(4,0), RowIndexes)
End Sub
' Selects the specified range of rows
Sub SelectRange (View, StartRowIndex, EndRowIndex)
' Select the first row of the range
View.ClickRowIndicator (StartRowIndex)
' Extend the selection
Call View.ClickRowIndicator (EndRowIndex, skShift)
End Sub
' Selects the specified rows
Sub SelectRows (View, RowIndexes)
' Select the first of the specified rows
View.ClickRowIndicator (RowIndexes(0))
' Add other rows to the selection
For i=1 To UBound(RowIndexes)
Call View.ClickRowindicator (RowIndexes(i), skCtrl)
Next
End Sub
DelphiScript
procedure SelectRange (View, StartRowIndex, EndRowIndex); forward;
procedure SelectRows (View, RowIndexes); forward;
procedure Main;
var p, Grid, RowIndexes : OleVariant;
begin
// Obtain the grid object
p := Sys.Process('MultipleRecordSelection');
p.WinFormsObject('Form1').Maximize;
Grid := p.WinFormsObject('Form1').WinFormsObject('gridGroupingControl1');
// Select rows 7-21 in the root table
SelectRange (Grid, 7, 21);
aqUtils.Delay (1000);
// Select multiple rows in a nested table
Grid.Expand(4);
RowIndexes := CreateVariantArray (0, 4);
RowIndexes[0] := 1; RowIndexes[1] := 2;
RowIndexes[2] := 4; RowIndexes[3] := 7;
RowIndexes[3] := 14;
SelectRows (Grid.wChildView[4,0], RowIndexes);
end;
// Selects the specified range of rows
procedure SelectRange (View, StartRowIndex, EndRowIndex);
begin
// Select the first row of the range
View.ClickRowIndicator (StartRowIndex);
// Extend the selection
View.ClickRowIndicator (EndRowIndex, skShift);
end;
// Selects the specified rows
procedure SelectRows (View, RowIndexes);
var i : OleVariant;
begin
// Select the first of the specified rows
View.ClickRowIndicator (RowIndexes[0]);
// Add other rows to the selection
for i := 1 to VarArrayHighBound(RowIndexes, 1)-1 do
View.ClickRowindicator (RowIndexes[i], skCtrl);
end;
C++Script, C#Script
function Main ()
{
var p, Grid, RowIndexes;
// Obtain the grid object
p = Sys["Process"]("MultipleRecordSelection");
p["WinFormsObject"]("Form1")["Maximize"]();
Grid = p["WinFormsObject"]("Form1")["WinFormsObject"]("gridGroupingControl1");
// Select rows 7-21 in the root table
SelectRange (Grid, 7, 21);
aqUtils["Delay"] (1000);
// Select multiple rows in a nested table
Grid["Expand"](4);
RowIndexes = new Array (1, 2, 4, 7, 14);
SelectRows (Grid["wChildView"](4,0), RowIndexes);
}
// Selects the specified range of rows
function SelectRange (View, StartRowIndex, EndRowIndex)
{
// Select the first row of the range
View["ClickRowIndicator"](StartRowIndex);
// Extend the selection
View["ClickRowIndicator"](EndRowIndex, skShift);
}
// Selects the specified rows
function SelectRows (View, RowIndexes)
{
// Select the first of the specified rows
View["ClickRowIndicator"](RowIndexes[0]);
// Add other rows to the selection
for (var i=1; i<RowIndexes["length"]; i++)
View["ClickRowindicator"](RowIndexes[i], skCtrl);
}
Using GridGroupingControl Internal Methods
The GridGroupingControl lets you programmatically manage the selected rows in each grid table; the root table as well as in tested tables. You can obtain the collection of records selected in a grid table using the following statements:
GridObj.Table.SelectedRecords
GridObj.GetTable(TableName).SelectedRecords
The first statement lets you get the collection of data rows selected in the grid’s root table, and the second one returns the records selected in a nested table (the table name is specified by the TableName parameter).
To select and unselect grid rows, use the following methods of the obtained collection:
Add (RecordObj)
-- Adds a row to the selection. The RecordObj parameter specifies the object corresponding to the desired row. You can obtain such an object using theGetRecord
routine from the Selecting Cells in Syncfusion GridGroupingControl topic.Remove (RecordObj)
-- Unselects the specified row.Clear
-- Unselects all rows in a table.
The following example demonstrates how you can select and unselect rows in the GridGroupingControl.
Example
JavaScript
function Main ()
{
var p, Grid, RowIndexes;
// Obtain the grid object
p = Sys.Process("MultipleRecordSelection");
p.WinFormsObject("Form1").Maximize();
Grid = p.WinFormsObject("Form1").WinFormsObject("gridGroupingControl1");
// Collapse all rows in the grid
Grid.Table.CollapseAllRecords();
// Select rows 10-20
SelectRange (Grid, null, 10, 20);
aqUtils.Delay (1000);
// Clear selection
ClearSelection (Grid, null);
aqUtils.Delay (1000);
// Select multiple rows
RowIndexes = new Array (10, 12, 15, 17, 23);
SelectRows (Grid, null, RowIndexes);
}
function SelectRange (Grid, TableOrGroup, StartRowIndex, EndRowIndex)
{
var SelectedRecords, Rec;
// Get the selected records in the specified table or group
if (strictEqual(TableOrGroup, null))
SelectedRecords = Grid.Table.SelectedRecords
else
SelectedRecords = Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords;
// Clear the previous selection
SelectedRecords.Clear();
// Select the specified range of rows
for (let i=StartRowIndex; i<=EndRowIndex; i++)
{
Rec = GetRecord (Grid, TableOrGroup, i);
SelectedRecords.Add (Rec);
}
}
function SelectRows (Grid, TableOrGroup, RecIndexes)
{
var SelectedRecords, Rec;
// Get the selected records in the specified table or group
if (strictEqual(TableOrGroup, null))
SelectedRecords = Grid.Table.SelectedRecords
else
SelectedRecords = Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords;
// Clear the previous selection
SelectedRecords.Clear();
// Select the specified rows
for (let i=0; i<RecIndexes.length; i++)
{
Rec = GetRecord (Grid, TableOrGroup, RecIndexes[i]);
SelectedRecords.Add (Rec);
}
}
function ClearSelection (Grid, TableOrGroup)
{
if (strictEqual(TableOrGroup, null))
Grid.Table.SelectedRecords.Clear()
else
Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords.Clear();
}
function GetRecord (Grid, TableOrGroup, Recindex)
{
// Get the root table if no table is specified
if (strictEqual(TableOrGroup, null))
TableOrGroup = Grid.Table.TopLevelGroup;
return TableOrGroup.Records.Item_2(Recindex);
}
JScript
function Main ()
{
var p, Grid, RowIndexes;
// Obtain the grid object
p = Sys.Process("MultipleRecordSelection");
p.WinFormsObject("Form1").Maximize();
Grid = p.WinFormsObject("Form1").WinFormsObject("gridGroupingControl1");
// Collapse all rows in the grid
Grid.Table.CollapseAllRecords();
// Select rows 10-20
SelectRange (Grid, null, 10, 20);
aqUtils.Delay (1000);
// Clear selection
ClearSelection (Grid, null);
aqUtils.Delay (1000);
// Select multiple rows
RowIndexes = new Array (10, 12, 15, 17, 23);
SelectRows (Grid, null, RowIndexes);
}
function SelectRange (Grid, TableOrGroup, StartRowIndex, EndRowIndex)
{
var SelectedRecords, Rec, i;
// Get the selected records in the specified table or group
if (TableOrGroup == null)
SelectedRecords = Grid.Table.SelectedRecords
else
SelectedRecords = Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords;
// Clear the previous selection
SelectedRecords.Clear();
// Select the specified range of rows
for (i=StartRowIndex; i<=EndRowIndex; i++)
{
Rec = GetRecord (Grid, TableOrGroup, i);
SelectedRecords.Add (Rec);
}
}
function SelectRows (Grid, TableOrGroup, RecIndexes)
{
var SelectedRecords, Rec, i;
// Get the selected records in the specified table or group
if (TableOrGroup == null)
SelectedRecords = Grid.Table.SelectedRecords
else
SelectedRecords = Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords;
// Clear the previous selection
SelectedRecords.Clear();
// Select the specified rows
for (i=0; i<RecIndexes.length; i++)
{
Rec = GetRecord (Grid, TableOrGroup, RecIndexes[i]);
SelectedRecords.Add (Rec);
}
}
function ClearSelection (Grid, TableOrGroup)
{
if (TableOrGroup == null)
Grid.Table.SelectedRecords.Clear()
else
Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords.Clear();
}
function GetRecord (Grid, TableOrGroup, Recindex)
{
// Get the root table if no table is specified
if (TableOrGroup == null)
TableOrGroup = Grid.Table.TopLevelGroup;
return TableOrGroup.Records.Item_2(Recindex);
}
Python
def Main ():
# Obtain the grid object
p = Sys.Process("MultipleRecordSelection")
p.WinFormsObject("Form1").Maximize()
Grid = p.WinFormsObject("Form1").WinFormsObject("gridGroupingControl1")
# Collapse all rows in the grid
Grid.Table.CollapseAllRecords()
# Select rows 10-20
SelectRange (Grid, None, 10, 20)
aqUtils.Delay (1000)
# Clear selection
ClearSelection (Grid, None)
aqUtils.Delay (1000)
# Select multiple rows
RowIndexes = list(10, 12, 15, 17, 23)
SelectRows (Grid, None, RowIndexes)
def SelectRange (Grid, TableOrGroup, StartRowIndex, EndRowIndex):
# Get the selected records in the specified table or group
if (TableOrGroup == None):
SelectedRecords = Grid.Table.SelectedRecords
else:
SelectedRecords = Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords
# Clear the previous selection
SelectedRecords.Clear()
# Select the specified range of rows
for i in range(StartRowIndex, EndRowIndex):
Rec = GetRecord (Grid, TableOrGroup, i)
SelectedRecords.Add (Rec)
def SelectRows (Grid, TableOrGroup, RecIndexes):
# Get the selected records in the specified table or group
if (TableOrGroup == None):
SelectedRecords = Grid.Table.SelectedRecords
else:
SelectedRecords = Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords
# Clear the previous selection
SelectedRecords.Clear()
# Select the specified rows
for i in range(0, RecIndexes.length-1):
Rec = GetRecord (Grid, TableOrGroup, RecIndexes[i])
SelectedRecords.Add (Rec)
def ClearSelection (Grid, TableOrGroup):
if (TableOrGroup == None):
Grid.Table.SelectedRecords.Clear()
else:
Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords.Clear()
def GetRecord (Grid, TableOrGroup, Recindex):
# Get the root table if no table is specified
if (TableOrGroup == None):
TableOrGroup = Grid.Table.TopLevelGroup
return TableOrGroup.Records.Item_2(Recindex)
VBScript
Sub Main
Dim p, Grid, RowIndexes
' Obtain the grid object
Set p = Sys.Process("MultipleRecordSelection")
p.WinFormsObject("Form1").Maximize
Set Grid = p.WinFormsObject("Form1").WinFormsObject("gridGroupingControl1")
' Collapse all rows
Grid.Table.CollapseAllRecords
' Select rows 10-20
Call SelectRange (Grid, Nothing, 10, 20)
Call aqUtils.Delay (1000)
' Clear selection
Call ClearSelection (Grid, Nothing)
Call aqUtils.Delay (1000)
' Select multiple rows
RowIndexes = Array (10, 12, 15, 17, 23)
Call SelectRows (Grid, Nothing, RowIndexes)
End Sub
Sub SelectRange (Grid, TableOrGroup, StartRowIndex, EndRowIndex)
Dim SelectedRecords, Rec, i
' Get the selected records in the specified table or group
If TableOrGroup Is Nothing Then
Set SelectedRecords = Grid.Table.SelectedRecords
Else
Set SelectedRecords = Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords
End If
' Clear the previous selection
SelectedRecords.Clear
' Select the specified range of rows
For i = StartRowIndex To EndRowIndex
Set Rec = GetRecord (Grid, TableOrGroup, i)
Call SelectedRecords.Add (Rec)
Next
End Sub
Sub SelectRows (Grid, TableOrGroup, RecIndexes)
Dim SelectedRecords, Rec, i
' Get the selected records in the specified table or group
If TableOrGroup Is Nothing Then
Set SelectedRecords = Grid.Table.SelectedRecords
Else
Set SelectedRecords = Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords
End If
' Clear the previous selection
SelectedRecords.Clear
' Select the specified rows
For i = LBound(RecIndexes) To UBound(RecIndexes)
Set Rec = GetRecord (Grid, TableOrGroup, RecIndexes(i))
Call SelectedRecords.Add (Rec)
Next
End Sub
Sub ClearSelection (Grid, TableOrGroup)
If TableOrGroup Is Nothing Then
Grid.Table.SelectedRecords.Clear
Else
Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords.Clear
End If
End Sub
Function GetRecord (Grid, TableOrGroup, RecordIndex)
' Get the root table if no table is specified
If TableOrGroup Is Nothing Then
Set TableOrGroup = Grid.Table.TopLevelGroup
End If
Set GetRecord = TableOrGroup.Records.Item_2(RecordIndex)
End Function
DelphiScript
procedure SelectRange (Grid, TableOrGroup, StartRowIndex, EndRowIndex); forward;
procedure SelectRows (Grid, TableOrGroup, RecIndexes); forward;
procedure ClearSelection (Grid, TableOrGroup); forward;
function GetRecord (Grid, TableOrGroup, RecordIndex); forward;
procedure Main;
var p, Grid, RowIndexes : OleVariant;
begin
// Obtain the grid object
p := Sys.Process('MultipleRecordSelection');
p.WinFormsObject('Form1').Maximize;
Grid := p.WinFormsObject('Form1').WinFormsObject('gridGroupingControl1');
// Clear selection
Grid.Table.CollapseAllRecords;
// Select rows 10-20
SelectRange (Grid, nil, 10, 20);
aqUtils.Delay (1000);
// Clear selection
ClearSelection (Grid, nil);
aqUtils.Delay (1000);
// Select multiple rows
RowIndexes := CreateVariantArray (0, 4);
RowIndexes[0] := 10; RowIndexes[1] := 12;
RowIndexes[2] := 15; RowIndexes[3] := 17;
RowIndexes[4] := 23;
SelectRows (Grid, nil, RowIndexes);
end;
procedure SelectRange (Grid, TableOrGroup, StartRowIndex, EndRowIndex);
var SelectedRecords, Rec, i : OleVariant;
begin
// Get the selected records in the specified table or group
if TableOrGroup = nil then
SelectedRecords := Grid.Table.SelectedRecords
else
SelectedRecords := Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords;
// Clear the previous selection
SelectedRecords.Clear;
// Select the specified range of rows
for i:=StartRowIndex to EndRowIndex do
begin
Rec := GetRecord (Grid, TableOrGroup, i);
SelectedRecords.Add (Rec);
end
end;
procedure SelectRows (Grid, TableOrGroup, RecIndexes);
var SelectedRecords, Rec, i : OleVariant;
begin
// Get the selected records in the specified table or group
if TableOrGroup = nil then
SelectedRecords := Grid.Table.SelectedRecords
else
SelectedRecords := Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords;
// Clear the previous selection
SelectedRecords.Clear;
// Select the specified rows
for i:=VarArrayLowBound(RecIndexes, 1) to VarArrayHighBound(RecIndexes, 1) do
begin
Rec := GetRecord (Grid, TableOrGroup, RecIndexes[i]);
SelectedRecords.Add (Rec);
end
end;
procedure ClearSelection (Grid, TableOrGroup);
begin
if TableOrGroup = nil then
Grid.Table.SelectedRecords.Clear
else
Grid.GetTable(TableOrGroup.ParentTableDescriptor.Name).SelectedRecords.Clear;
end;
function GetRecord (Grid, TableOrGroup, RecordIndex);
begin
// Get the root table if no table is specified
if TableOrGroup = nil then
TableOrGroup := Grid.Table.TopLevelGroup;
Result := TableOrGroup.Records.Item_2[RecordIndex];
end;
C++Script, C#Script
function Main ()
{
var p, Grid, RowIndexes;
// Obtain the grid object
p = Sys["Process"]("MultipleRecordSelection");
p["WinFormsObject"]("Form1")["Maximize"]();
Grid = p["WinFormsObject"]("Form1")["WinFormsObject"]("gridGroupingControl1");
// Collapse all rows in the grid
Grid["Table"]["CollapseAllRecords"]();
// Select rows 10-20
SelectRange (Grid, null, 10, 20);
aqUtils["Delay"] (1000);
// Clear selection
ClearSelection (Grid, null);
aqUtils["Delay"] (1000);
// Select multiple rows
RowIndexes = new Array (10, 12, 15, 17, 23);
SelectRows (Grid, null, RowIndexes);
}
function SelectRange (Grid, TableOrGroup, StartRowIndex, EndRowIndex)
{
var SelectedRecords, Rec, i;
// Get the selected records in the specified table or group
if (TableOrGroup == null)
SelectedRecords = Grid["Table"]["SelectedRecords"]
else
SelectedRecords = Grid["GetTable"](TableOrGroup["ParentTableDescriptor"]["Name"])["SelectedRecords"];
// Clear the previous selection
SelectedRecords["Clear"]();
// Select the specified range of rows
for (i=StartRowIndex; i<=EndRowIndex; i++)
{
Rec = GetRecord (Grid, TableOrGroup, i);
SelectedRecords["Add"](Rec);
}
}
function SelectRows (Grid, TableOrGroup, RecIndexes)
{
var SelectedRecords, Rec, i;
// Get the selected records in the specified table or group
if (TableOrGroup == null)
SelectedRecords = Grid["Table"]["SelectedRecords"]
else
SelectedRecords = Grid["GetTable"](TableOrGroup["ParentTableDescriptor"]["Name"])["SelectedRecords"];
// Clear the previous selection
SelectedRecords["Clear"]();
// Select the specified rows
for (i=0; i<RecIndexes["length"]; i++)
{
Rec = GetRecord (Grid, TableOrGroup, RecIndexes[i]);
SelectedRecords["Add"](Rec);
}
}
function ClearSelection (Grid, TableOrGroup)
{
if (TableOrGroup == null)
Grid["Table"]["SelectedRecords"]["Clear"]()
else
Grid["GetTable"](TableOrGroup["ParentTableDescriptor"]["Name"])["SelectedRecords"]["Clear"]();
}
function GetRecord (Grid, TableOrGroup, Recindex)
{
// Get the root table if no table is specified
if (TableOrGroup == null)
TableOrGroup = Grid["Table"]["TopLevelGroup"];
return TableOrGroup["Records"]["Item_2"](Recindex);
}
See Also
Working With Syncfusion GridGroupingControl
ClickRowIndicator Action (Grid Controls)
Obtaining Selected Rows in Syncfusion GridGroupingControl
Iterating Through Rows in Syncfusion GridGroupingControl
Selecting Cells in Syncfusion GridGroupingControl