Selecting Multiple Rows in Microsoft DataGrid

Applies to TestComplete 15.46, last modified on January 09, 2023

When testing an application that uses Microsoft DataGrid .NET controls, you may need to select multiple rows in the grid. You can then perform various operations over the selected rows, for example, obtain their data.

Normally, the users can select multiple rows in the DataGrid control 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 grid row indicator, you can use the ClickRowIndicator action of the MicrosoftDataGrid object. Its parameters specify the row to be clicked, and also whether the Shift, Ctrl, Alt or combination of these keys should be pressed during the click.

Note: The ClickRowIndicator actions as well as other methods, properties and actions of the MicrosoftDataGrid object are only available if the Microsoft Control Support plugin is installed and enabled.

Below is an example that illustrates how you can use the ClickRowIndicator action to select multiple rows and a range of rows in the grid control.

Example

View description

JavaScript, JScript

function Main ()
{
  var p, Grid, RowIndexes;
  // Obtain the grid object
  p = Sys.Process("DataGridSample");
  Grid = p.WinFormsObject("Form1").WinFormsObject("dataGrid1");

  // Select multiple rows
  RowIndexes = new Array (0, 1, 4, 7);
  SelectRows (Grid, RowIndexes);

  // Select a range of rows
  SelectRange (Grid, 2, 6);
}

// Selects the specified rows
function SelectRows (Grid, RowIndexes)
{
  // Select the first of the specified rows
  Grid.ClickRowIndicator (RowIndexes[0]);
  // Add other rows to the selection
  for (var i=1; i<RowIndexes.length; i++)
    Grid.ClickRowIndicator (RowIndexes[i], skCtrl);
}

// Selects a range of rows
function SelectRange (Grid, StartRowIndex, EndRowIndex)
{
  // Select the first row of the range
  Grid.ClickRowIndicator (StartRowIndex);
  // Extend the selection
  Grid.ClickRowIndicator (EndRowIndex, skShift);
}

Python

def Main ():
  # Obtain the grid object
  p = Sys.Process("DataGridSample")
  Grid = p.WinFormsObject("Form1").WinFormsObject("dataGrid1")

  # Select multiple rows
  RowIndexes = list(0, 1, 4, 7)
  SelectRows (Grid, RowIndexes)

  # Select a range of rows
  SelectRange (Grid, 2, 6)

# Selects the specified rows
def SelectRows (Grid, RowIndexes):
  # Select the first of the specified rows
  Grid.ClickRowIndicator (RowIndexes[0])
  # Add other rows to the selection
  for i in range(1, RowIndexes.length-1):
    Grid.ClickRowIndicator (RowIndexes[i], skCtrl) 

# Selects a range of rows
def SelectRange (Grid, StartRowIndex, EndRowIndex):
  # Select the first row of the range
  Grid.ClickRowIndicator (StartRowIndex)
  # Extend the selection
  Grid.ClickRowIndicator (EndRowIndex, skShift)

VBScript

Sub Main
  Dim p, Grid, RowIndexes
  ' Obtain the grid object
  Set p = Sys.Process("DataGridSample")
  Set Grid = p.WinFormsObject("Form1").WinFormsObject("dataGrid1")

  ' Select multiple rows
  RowIndexes = Array (0, 1, 4, 7)
  Call SelectRows (Grid, RowIndexes)

  ' Select a range of rows
  Call SelectRange (Grid, 2, 6)
End Sub

' Selects the specified rows
Sub SelectRows (Grid, RowIndexes)
  ' Select the first of the specified rows
  Grid.ClickRowIndicator (RowIndexes(0))
  ' Add other rows to the selection
  For i = 1 To UBound(RowIndexes)
    Call Grid.ClickRowIndicator (RowIndexes(i), skCtrl)
  Next 
End Sub

' Selects a range of rows
Sub SelectRange (Grid, StartRowIndex, EndRowIndex)
  ' Select the first row of the range
  Grid.ClickRowIndicator (StartRowIndex)
  ' Extend the selection
  Call Grid.ClickRowIndicator (EndRowIndex, skShift)
End Sub

DelphiScript

procedure SelectRows (Grid, RowIndexes); forward;
procedure SelectRange (Grid, StartRowIndex, EndRowIndex); forward;

procedure Main;
var p, Grid, RowIndexes : OleVariant;
begin
  // Obtain the grid object
  p := Sys.Process('DataGridSample');
  Grid := p.WinFormsObject('Form1').WinFormsObject('dataGrid1');

  // Select multiple rows
  RowIndexes := CreateVariantArray (0, 3);
  RowIndexes[0] := 0; RowIndexes[1] := 1;
  RowIndexes[2] := 4; RowIndexes[3] := 7;
  SelectRows (Grid, RowIndexes);

  // Select a range of rows
  SelectRange (Grid, 2, 6);
end;

// Selects the specified rows
procedure SelectRows (Grid, RowIndexes);
var i : OleVariant;
begin
  // Select the first of the specified rows
  Grid.ClickRowIndicator (RowIndexes[0]);
  // Add other rows to the selection
  for i := 1 to VarArrayHighBound(RowIndexes, 1) do
    Grid.ClickRowIndicator (RowIndexes[i], skCtrl);
end;

// Selects a range of rows
procedure SelectRange (Grid, StartRowIndex, EndRowIndex);
begin
  // Select the first row of the range
  Grid.ClickRowIndicator (StartRowIndex);
  // Extend the selection
  Grid.ClickRowIndicator (EndRowIndex, skShift);
end;

C++Script, C#Script

function Main ()
{
  var p, Grid, RowIndexes;
  // Obtain the grid object
  p = Sys["Process"]("DataGridSample");
  Grid = p["WinFormsObject"]("Form1")["WinFormsObject"]("dataGrid1");

  // Select multiple rows
  RowIndexes = new Array (0, 1, 4, 7);
  SelectRows (Grid, RowIndexes);

  // Select a range of rows
  SelectRange (Grid, 2, 6);
}

// Selects the specified rows
function SelectRows (Grid, RowIndexes)
{
  // Select the first of the specified rows
  Grid["ClickRowIndicator"](RowIndexes[0]);
  // Add other rows to the selection
  for (var i=1; i<RowIndexes["length"]; i++)
    Grid["ClickRowIndicator"](RowIndexes[i], skCtrl);
}

// Selects a range of rows
function SelectRange (Grid, StartRowIndex, EndRowIndex)
{
  // Select the first row of the range
  Grid["ClickRowIndicator"](StartRowIndex);
  // Extend the selection
  Grid["ClickRowIndicator"](EndRowIndex, skShift);
}

See Also

Working With Microsoft DataGrid
Selecting Cells in Microsoft DataGrid
Obtaining Selected Records in Microsoft DataGrid
ClickCell Action (Grid Controls)
ClickColumnHeader Action (Grid Controls)
ClickRowIndicator Action (Grid Controls)

Highlight search results