The QuantumGrid control supports hierarchical data representation. If the grid displays data of multiple nested data tables, then each data row can have child rows containing data associated with this row. To view the child data, the user needs to expand its parent row. The grid data can also be grouped by one or several columns, so the individual rows are organized into groups. This topic explains how you can expand and collapse rows and groups in the QuantumGrid control from your test scripts:
In order for TestComplete to be able to perform these actions, the following conditions must be met:
When testing Developer Express QuantumGrid controls, use specific methods and properties of the corresponding |
Using the DevExpressQuantumGrid.Expand and Collapse Actions
The DevExpressQuantumGrid
object has special methods and properties to work with expandable rows of both types. To determine whether the row is a group row, check the ViewObj.ViewData.Rows(RowIndex).HasCells
property of the row object. Group rows do not have cells, so this property will be False for them.
Group rows are expanded and collapsed by the ExpandGroup
and CollapseGroup
actions. The current state of a group row can be obtained with the wGroupExpanded
property, which returns True if the group is currently expanded.
Similarly, data rows are expanded and collapsed by the Expand
and Collapse
actions. The current state of a row is returned by the wExpanded
property. If the row to be expanded has child data, then you may need to focus this row in order for the grid to display the appropriate child data. To focus the row, you can perform a click upon the row indicator with the ClickRowIndicator
action or assign True to the ViewObj.ViewData.Rows(rowIndex).Focused
property of the corresponding “native” row object.
The following example illustrates how you can expand and collapse ordinary and group rows using actions provided by TestComplete:
JavaScript, JScript
function Main ()
{
var p, Grid;
// Obtain the grid object
p = Sys.Process("Process1");
Grid = p.VCLObject("Form1").VCLObject("cxGrid1");
// Check whether the grid has group rows
if (Grid.wGroupCount > 0)
// Expand the second group
Grid.ExpandGroup(1);
// Expand the third data row
Grid.Expand(2);
aqUtils.Delay(2000);
// Collapse the third data row
Grid.Collapse(2);
if (Grid.wGroupCount > 0)
// Collapse the second group
Grid.CollapseGroup(1);
}
Python
def Main():
# Obtain the grid object
p = Sys.Process("Process1")
Grid = p.VCLObject("Form1").VCLObject("cxGrid1")
# Check whether the grid has group rows
if (Grid.wGroupCount > 0):
# Expand the second group
Grid.ExpandGroup(1)
# Expand the third data row
Grid.Expand(2)
aqUtils.Delay(2000)
# Collapse the third data row
Grid.Collapse(2)
if (Grid.wGroupCount > 0):
# Collapse the second group
Grid.CollapseGroup(1)
VBScript
Sub Main
Dim p, Grid
' Obtain the grid object
Set p = Sys.Process("Process1")
Set Grid = p.VCLObject("Form1").VCLObject("cxGrid1")
' Check whether the grid has group rows
If Grid.wGroupCount > 0 Then
' Expand the second group
Grid.ExpandGroup(1)
End If
' Expand the third data row
Grid.Expand(2)
aqUtils.Delay(2000)
' Collapse the third data row
Grid.Collapse(2)
If Grid.wGroupCount > 0 Then
' Collapse the second group
Grid.CollapseGroup (1)
End If
End Sub
DelphiScript
procedure Main;
var p, Grid: OleVariant;
begin
// Obtain the grid object
p := Sys.Process('Process1');
Grid := p.VCLObject('Form1').VCLObject('cxGrid1');
// Check whether a grid has group rows
if Grid.wGroupCount > 0 then
// Expand the second group
Grid.ExpandGroup (1);
// Expand the third data row
Grid.Expand(2);
aqUtils.Delay(2000);
// Collapse the third data row
Grid.Collapse(2);
if Grid.wGroupCount > 0 then
// Collapse the second group
Grid.CollapseGroup(1);
end;
C++Script, C#Script
function Main ()
{
var p, Grid;
// Obtain the grid object
p = Sys["Process"]("Process1");
Grid = p["VCLObject"]("Form1")["VCLObject"]("cxGrid1");
// Check whether the grid has group rows
if (Grid["wGroupCount"] > 0)
// Expand the second group
Grid["ExpandGroup"](1);
// Expand the third data row
Grid["Expand"](2);
aqUtils["Delay"](2000);
// Collapse the third data row
Grid["Collapse"](2);
if (Grid["wGroupCount"] > 0)
// Collapse the second group
Grid["CollapseGroup"](1);
}
Using TcxGrid Internal Methods and Properties
Another way to expand and collapse grid rows is to use the internal methods of the TcxGrid object (TcxGrid is the class name of QUantumGrid controls). To expand or collapse the row, you can write script code that will perform the following actions:
- Find the desired row in the grid. You can find the desired row using one of the methods mentioned in the Searching for Records in Developer Express QuantumGrid topic.
- Obtain the row object that provides a scripting interface to the row. You can do this by using the
Row
property of the view object. QuantumGrid can display data in several levels. View objects are associated with levels, they define what data the level displays and how it displays them. See Getting Views in Developer Express QuantumGrid for more information. - Use the
Expand
orCollapse
methods of the appropriate row object to expand or collapse the row, respectively.Note that only group rows and rows that have child data can be expanded and collapsed. To determine whether a row can be expanded or collapsed, use the
Expandable
property of the row object.To check if the row is already expanded (or collapsed), use the
Expanded
property of the row object.To determine whether the row is a group row, check the
ViewObj.ViewData.Rows(rowIndex).HasCells
property of the row object. Group rows do not have cells, so this property will be False for them.
The following sample demonstrates how to use the mentioned internal methods and properties to expand and collapse grid rows:
Example
JavaScript
function Main()
{
var p, Grid, r;
p = Sys.Process("Project1");
Grid = p.VCLObject("Form1").VCLObject("cxGrid1");
// Search for a row
r = FindRow (Grid, "VendorNo", "2674", 0);
// Expand the row
ExpandGridRow(Grid, null, r);
// To collapse the row, use the following code:
// CollapseGridRow(Grid, null, r);
}
// Expand a row
function ExpandGridRow(grid, view, rowIndex)
{
let Row;
// Obtain the view object
if (strictEqual(view, null))
view = grid.ActiveView;
// Get the row object
Row = view.ViewData.Rows(rowIndex);
// Check if the row can be expanded
if (Row.Expandable)
Row.Expand(false); // Expand the row
}
// Collapse a row
function CollapseGridRow(grid, view, rowIndex)
{
var Row;
// Obtain the view object
if (strictEqual(view, null))
view = grid.ActiveView;
// Get the row object
Row = view.ViewData.Rows(rowIndex);
// Check if the row can be collapsed or expanded
if (Row.Expandable)
Row.Collapse(false); // Collapse the row
}
JScript
function Main()
{
var p, Grid, r;
p = Sys.Process("Project1");
Grid = p.VCLObject("Form1").VCLObject("cxGrid1");
// Search for a row
r = FindRow (Grid, "VendorNo", "2674", 0);
// Expand the row
ExpandGridRow(Grid, null, r);
// To collapse the row, use the following code:
// CollapseGridRow(Grid, null, r);
}
// Expand a row
function ExpandGridRow(grid, view, rowIndex)
{
var Row;
// Obtain the view object
if (view == null)
view = grid.ActiveView;
// Get the row object
Row = view.ViewData.Rows(rowIndex);
// Check if the row can be expanded
if (Row.Expandable)
Row.Expand(false); // Expand the row
}
// Collapse a row
function CollapseGridRow(grid, view, rowIndex)
{
var Row;
// Obtain the view object
if (view == null)
view = grid.ActiveView;
// Get the row object
Row = view.ViewData.Rows(rowIndex);
// Check if the row can be collapsed or expanded
if (Row.Expandable)
Row.Collapse(false); // Collapse the row
}
Python
def Main():
p = Sys.Process("Project1")
Grid = p.VCLObject("Form1").VCLObject("cxGrid1")
# Search for a row
r = FindRow (Grid, "VendorNo", "2674", 0)
# Expand the row
ExpandGridRow(Grid, None, r)
# To collapse the row, use the following code:
# CollapseGridRow(Grid, None, r)
# Expand a row
def ExpandGridRow(grid, view, rowIndex):
# Obtain the view object
if (view == None):
view = grid.ActiveView
# Get the row object
Row = view.ViewData.Rows(rowIndex)
# Check if the row can be expanded
if (Row.Expandable):
Row.Expand(False) # Expand the row
# Collapse a row
def CollapseGridRow(grid, view, rowIndex):
# Obtain the view object
if (view == None):
view = grid.ActiveView
# Get the row object
Row = view.ViewData.Rows(rowIndex)
# Check if the row can be collapsed or expanded
if (Row.Expandable):
Row.Collapse(False) # Collapse the row
VBScript
Sub Main
Set p = Sys.Process("Project1")
Set Grid = p.VCLObject("Form1").VCLObject("cxGrid1")
' Search for a row
r = FindRow (Grid, "VendorNo", "2674", 0)
' Expand the row
Call ExpandGridRow(Grid, Nothing, r)
' To collapse the row, use the following code:
' Call CollapseGridRow(Grid, Nothing, r)
End Sub
' Expand a row
Sub ExpandGridRow(grid, view, rowIndex)
' Obtain the view object
If view Is Nothing Then
Set view = grid.ActiveView
End If
' Get the row object
Set Row = view.ViewData.Rows(rowIndex)
' Check if the row can be expanded
If Row.Expandable Then
' Expand the row
Row.Expand(false)
End If
End Sub
' Collapse a row
Sub CollapseGridRow(grid, view, rowIndex)
' Obtain the view object
If view Is Nothing Then
Set view = grid.ActiveView
End If
' Get the row object
Set Row = view.ViewData.Rows(rowIndex)
' Check if the row can be collapsed or expanded
If Row.Expandable Then
' Collapse the row
Row.Collapse(false)
End If
End Sub
DelphiScript
procedure ExpandGridRow(grid, view, rowIndex); forward;
procedure CollapseGridRow(grid, view, rowIndex); forward;
function FindRow (Grid, ColumnId, SearchString, ViewId : OleVariant = 0): OleVariant; forward;
procedure Main;
var
p, Grid, r : OleVariant;
begin
p := Sys.Process('Project1');
Grid := p.VCLObject('Form1').VCLObject('cxGrid1');
// Search for a row
r := FindRow (Grid, 'VendorNo', '2674', 0);
// Expand the row
ExpandGridRow(Grid, nil, r);
// To collapse the row, use the following code:
// CollapseGridRow(Grid, nil, r);
end;
// Expand a row
procedure ExpandGridRow(grid, view, rowIndex);
var
Row : OleVariant;
begin
// Obtain the view object
if view = nil then
view := grid.ActiveView;
// Get the row object
Row := view.ViewData.Rows(rowIndex);
// Check if the row can be expanded
if Row.Expandable then
Row.Expand(False); // Expand the row
end;
// Collapse a row
procedure CollapseGridRow(grid, view, rowIndex);
var
Row : OleVariant;
begin
// Obtain the view object
if view = nil then
view := grid.ActiveView;
// Get the row object
Row := view.ViewData.Rows(rowIndex);
// Check if the row can be collapsed or expanded
if Row.Expandable then
Row.Collapse(False); // Collapse the row
end;
C++Script, C#Script
function Main()
{
var p, Grid, r;
p = Sys["Process"]("Project1");
Grid = p["VCLObject"]("Form1")["VCLObject"]("cxGrid1");
// Search for a row
r = FindRow (Grid, "VendorNo", "2674", 0);
// Expand the row
// ExpandGridRow(Grid, null, r);
// To collapse the row, use the following code:
CollapseGridRow(Grid, null, r);
}
// Expand a row
function ExpandGridRow(grid, view, rowIndex)
{
var Row;
// Obtain the view object
if (view == null)
view = grid["ActiveView"];
// Get the row object
Row = view["ViewData"]["Rows"](rowIndex);
// Check if the row can be expanded
if (Row["Expandable"])
Row["Expand"](false); // Expand the row
}
// Collapse a row
function CollapseGridRow(grid, view, rowIndex)
{
var Row;
// Obtain the view object
if (view == null)
view = grid["ActiveView"];
// Get the row object
Row = view["ViewData"]["Rows"](rowIndex);
// Check if the row can be collapsed or expanded
if (Row["Expandable"])
Row["Collapse"](false); // Collapse the row
}
See Also
Working With Developer Express QuantumGrid
Getting Views in Developer Express QuantumGrid
Collapse Action (Specific to DevExpressQuantumGrid Controls)
CollapseGroup Action (Specific to DevExpressQuantumGrid Controls)
Expand Action (Specific to DevExpressQuantumGrid Controls)
ExpandGroup Action (Specific to DevExpressQuantumGrid Controls)