Grids that display hierarchical data or permit data grouping are able to expand data view rows. When a row is expanded it becomes a parent to child rows from a lower data view that display information regarding the parent record. The child row, in its turn, could become a parent to the rows of a lower hierarchy level and so forth. To reduce the detailed information from the other data views the parent row can be collapsed.
|  | To perform these actions, TestComplete should have access to internal objects, properties and methods of the UltraGrid control. For this purpose, the .NET Application Support plugin must be installed and enabled. When testing Infragistics UltraGrid controls, use specific methods and properties of the corresponding  | 
| Note: | The UltraGrid control can contain expandable rows of two types: 
 You can verify the type of expandable row with the internal  | 
Using the Expand and Collapse Actions of InfragisticsUltraGridView and InfragisticsUltraGrid Objects
To expand or collapse rows of the UltraGrid control, you can use the Expand and Collapse actions of the InfragisticsUltraGrid or InfragisticsUltraGridView objects. The actions of the InfragisticsUltraGrid object apply to the rows of the main data view, whereas the InfragisticsUltraGridView actions affect the rows of the respective child data view. The wExpanded property of these objects indicates the current expanded state of a particular row.
The following example illustrates how you can expand and collapse rows using actions provided by TestComplete:
| Note: | This example works with the SamplesExplorer application that is shipped with the Infragistics NetAdvantage Suite. | 
JavaScript, JScript
function ExtendedExpandCollapse()
{
  var p1
  var w1
  var Grid
  
  // Obtain the application process and its main form
  p1 = Sys.Process("SamplesExplorer");
  w1 = p1.frmMain.WinFormsObject("tvwSamples");
  // Select the "Merged Cells Feature" demo
  w1.DblClickItem("|Feature Samples|V5.1 Merged Cells Feature");
  
  // Obtain the grid control
  Grid = p1.frmMergedCells.WinFormsObject("UltraGrid1");
  
  // Expand the first row in the main view
  Grid.Expand(0);  
  // Expand the second row of a first row's data view  
  Grid.wChildView(0).Expand(1);
  aqUtils.Delay(1000);
  // Collapse the second row of a first row's data view  
  Grid.wChildView(0).Collapse(1);
  // Collapse the first row in the main view  
  Grid.Expand(0, false);   
}
Python
def ExtendedExpandCollapse():
  
  # Obtain the application process and its main form
  p1 = Sys.Process("SamplesExplorer")
  w1 = p1.frmMain.WinFormsObject("tvwSamples")
  # Select the "Merged Cells Feature" demo
  w1.DblClickItem("|Feature Samples|V5.1 Merged Cells Feature")
  
  # Obtain the grid control
  Grid = p1.frmMergedCells.WinFormsObject("UltraGrid1")
  
  # Expand the first row in the main view
  Grid.Expand(0) 
  # Expand the second row of a first row's data view 
  Grid.wChildView[0].Expand(1)
  aqUtils.Delay(1000)
  # Collapse the second row of a first row's data view 
  Grid.wChildView[0].Collapse(1)
  # Collapse the first row in the main view 
  Grid.Expand(0, False)VBScript
Sub ExtendedExpandCollapse
  Dim p1
  Dim w1
  Dim Grid
  
  ' Obtain the application process and its main form
  Set p1 = Sys.Process("SamplesExplorer")
  Set w1 = p1.frmMain.WinFormsObject("tvwSamples")
  ' Select the "Merged Cells Feature" demo
  Call w1.DblClickItem("|Feature Samples|V5.1 Merged Cells Feature")
  
  ' Obtain the grid control
  Set Grid = p1.frmMergedCells.WinFormsObject("UltraGrid1")
  
  ' Expand the first row in the main view
  Call Grid.Expand(0)  
  ' Expand the second row of a first row's data view  
  Call Grid.wChildView(0).Expand(1)
  aqUtils.Delay(1000)
  ' Collapse the second row of a first row's data view  
  Call Grid.wChildView(0).Collapse(1)
  ' Collapse the first row in the main view  
  Call Grid.Expand(0, False)   
End Sub
DelphiScript
procedure ExtendedExpandCollapse;
  var p1: OleVariant;
  var w1: OleVariant;
  var Grid: OleVariant;
begin
  // Obtain the application process and its main form
  p1 := Sys.Process('SamplesExplorer');
  w1 := p1.frmMain.WinFormsObject('tvwSamples');
  // Select the "Merged Cells Feature" demo
  w1.DblClickItem('|Feature Samples|V5.1 Merged Cells Feature');
  
  // Obtain the grid control
  Grid := p1.frmMergedCells.WinFormsObject('UltraGrid1');
  
  // Expand the first row in the main view
  Grid.Expand(0);  
  // Expand the second row of a first row's data view  
  Grid.wChildView[0].Expand(1);
  aqUtils.Delay(1000);
  // Collapse the second row of a first row's data view  
  Grid.wChildView[0].Collapse(1);
  // Collapse the first row in the main view  
  Grid.Expand(0, False);   
end;
C++Script, C#Script
function ExtendedExpandCollapse()
{
  var p1
  var w1
  var Grid
  
  // Obtain the application process and its main form
  p1 = Sys["Process"]("SamplesExplorer");
  w1 = p1["frmMain"]["WinFormsObject"]("tvwSamples");
  // Select the "Merged Cells Feature" demo
  w1["DblClickItem"]("|Feature Samples|V5.1 Merged Cells Feature");
  
  // Obtain the grid control
  Grid = p1["frmMergedCells"]["WinFormsObject"]("UltraGrid1");
  
  // Expand the first row in the main view
  Grid["Expand"](0);  
  // Expand the second row of a first row's data view  
  Grid["wChildView"](0)["Expand"](1);
  aqUtils["Delay"](1000);
  // Collapse the second row of a first row's data view  
  Grid["wChildView"](0)["Collapse"](1);
  // Collapse the first row in the main view  
  Grid["Expand"](0, false);   
}
Using Internal Methods of the UltraGrid Control
This approach utilizes the internal methods and properties that are exposed by the .NET Application Support plugin.
The following table lists methods and properties that can be used to expand and collapse data rows and groups in the UltraGrid control. For more information on these methods, please refer to the Infragistics NetAdvantage documentation.
| Method, Property | Description | 
|---|---|
| UltraGridRowObj.AllAncestorsExpanded | Read-only property. Indicates if the row’s parent row and all its ancestors are expanded. | 
| UltraGridRowObj.Expanded | Read-write property. Specifies whether the row is expanded or not. | 
| UltraGridRowObj.IsExpandable | Read-only property. Indicates whether the retrieved row can be expanded. | 
| UltraGridRowObj.IsExpanded | Read-only property. Returns true if the row is expanded in the display. | 
| UltraGridRowObj.ExpandAll | Method. Expands all of the child rows of the current row. | 
| UltraGridRowObj.CollapseAll | Method. Collapses all of the child rows of the current row. | 
You can obtain the UltraGridRow object via the GetRow routine. It returns an object that  corresponds to the row with a specified index. You can find the code for it in the Accessing Grid Elements in Infragistics UltraGrid topic.
Example
JavaScript
function ExpandRow(Grid, View, RowIdx)
{
  // Obtain the row object
  Row = GetRow(Grid, View, RowIdx)
  
  if (!strictEqual(Row, null))
    {
    // Check whether a row can be expanded
    if (Row.IsExpandable) 
      {
      Row.Expanded = true
      return true
      }
    }
   return false 
}
function CollapseRow(Grid, View, RowIdx)
{
  // Obtain the row object
  Row = GetRow(Grid, View, RowIdx)
  
  if (!strictEqual(Row, null))
    {
    // Check whether a row can be collapsed
    if (Row.IsExpandable) 
      {
      Row.Expanded = false
      return true
      }
    }
   return false 
}
function TestExpandCollapse()
{
var Grid;
  RowIdx=0
  // Obtain the grid object
  Grid = Sys.Process("SamplesExplorer").WinFormsObject("frmEmptyRows").WinFormsObject("UltraGrid1");
  
  if (ExpandRow(Grid, null, RowIdx)) 
         Log.Message("The row "+RowIdx+" was expanded.")
    else Log.Message("The row "+RowIdx+" cannot be expanded.")  
  
  if (CollapseRow(Grid, null, RowIdx)) 
         Log.Message("The row "+RowIdx+" was collapsed.")
    else Log.Message("The row "+RowIdx+" cannot be collapsed.")
}
JScript
function ExpandRow(Grid, View, RowIdx)
{
  // Obtain the row object
  Row = GetRow(Grid, View, RowIdx)
  
  if (Row != null)
    {
    // Check whether a row can be expanded
    if (Row.IsExpandable) 
      {
      Row.Expanded = true
      return true
      }
    }
   return false 
}
function CollapseRow(Grid, View, RowIdx)
{
  // Obtain the row object
  Row = GetRow(Grid, View, RowIdx)
  
  if (Row != null)
    {
    // Check whether a row can be collapsed
    if (Row.IsExpandable) 
      {
      Row.Expanded = false
      return true
      }
    }
   return false 
}
function TestExpandCollapse()
{
var Grid;
  RowIdx=0
  // Obtain the grid object
  Grid = Sys.Process("SamplesExplorer").WinFormsObject("frmEmptyRows").WinFormsObject("UltraGrid1");
  
  if (ExpandRow(Grid, null, RowIdx)) 
         Log.Message("The row "+RowIdx+" was expanded.")
    else Log.Message("The row "+RowIdx+" cannot be expanded.")  
  
  if (CollapseRow(Grid, null, RowIdx)) 
         Log.Message("The row "+RowIdx+" was collapsed.")
    else Log.Message("The row "+RowIdx+" cannot be collapsed.")
}
Python
def ExpandRow(Grid, View, RowIdx):
  # Obtain the row object
  Row = GetRow(Grid, View, RowIdx)
  
  if (Row != None):
    # Check whether a row can be expanded
    if (Row.IsExpandable): 
      Row.Expanded = True
      return True
   return False 
def CollapseRow(Grid, View, RowIdx):
  # Obtain the row object
  Row = GetRow(Grid, View, RowIdx)
  
  if (Row != None):
    # Check whether a row can be collapsed
    if (Row.IsExpandable): 
      Row.Expanded = False
      return True
   return False 
def TestExpandCollapse():
  RowIdx=0
  # Obtain the grid object
  Grid = Sys.Process("SamplesExplorer").WinFormsObject("frmEmptyRows").WinFormsObject("UltraGrid1")
  
  if (ExpandRow(Grid, None, RowIdx)) :
    Log.Message("The row "+RowIdx+" was expanded.")
  else:
    Log.Message("The row "+RowIdx+" cannot be expanded.") 
  
  if (CollapseRow(Grid, None, RowIdx)):
    Log.Message("The row "+RowIdx+" was collapsed.")
  else :
    Log.Message("The row "+RowIdx+" cannot be collapsed.")VBScript
Function ExpandRow(Grid, View, RowIdx)
  ' Set initial value for function
  ExpandRow = False
  ' Obtain the row object
  Set Row = GetRow(Grid, View, RowIdx)
  If Not Row Is Nothing Then
    ' Check whether a row can be expanded
    If Row.IsExpandable Then
      Row.Expanded = True
      ExpandRow = True
    End If
  End If
End Function
Function CollapseRow(Grid, View, RowIdx)
  ' Set initial value for function
  CollapseRow = False
  ' Obtain the row object
  Set Row = GetRow(Grid, View, RowIdx)
  If Not Row Is Nothing Then
    ' Check whether a row can be collapsed
    If Row.IsExpandable Then
      Row.Expanded = False
      CollapseRow = True
    End If
  End If
End Function
Sub TestExpandCollapse
Dim Grid
  RowIdx=0
  ' Obtain the grid object
  Set Grid = Sys.Process("SamplesExplorer").WinFormsObject("frmEmptyRows").WinFormsObject("UltraGrid1")
  
  If ExpandRow(Grid, Nothing, RowIdx) Then 
         Log.Message("The row "+CStr(RowIdx)+" was expanded.")
    Else Log.Message("The row "+CStr(RowIdx)+" cannot be expanded.")
  End If
  
  If CollapseRow(Grid, Nothing, RowIdx) Then 
         Log.Message("The row "+CStr(RowIdx)+" was collapsed.")
    Else Log.Message("The row "+CStr(RowIdx)+" cannot be collapsed.")
  End If
End Sub
DelphiScript
function ExpandRow(Grid, View, RowIdx);
var
  Row: Variant;
begin
  // Set initial value for function
  Result := False;
  // Obtain the row object
  Row := GetRow(Grid, View, RowIdx);
  if Row<>nil then
    begin
      // Check whether a row can be expanded
      if Row.IsExpandable then
        begin
          Row.Expanded := True;
          Result:=True;
        end;    
    end;      
end;
function CollapseRow(Grid, View, RowIdx);
var
  Row: Variant;
begin
  // Set initial value for function
  Result := False;
  // Obtain the row object
  Row := GetRow(Grid, View, RowIdx);
  if Row<>nil then
    begin
      // Check whether a row can be collapsed
      if Row.IsExpandable then
        begin
          Row.Expanded := False;
          Result:=True;
        end;    
    end;      
end;
procedure TestExpandCollapse;
var Grid: Variant;
    RowIdx: integer;
begin
  RowIdx:=0;
  // Obtain the grid object
  Grid := Sys.Process('SamplesExplorer').WinFormsObject('frmEmptyRows').WinFormsObject('UltraGrid1');
  
  if ExpandRow(Grid, nil, RowIdx) then 
         Log.Message('The row '+aqConvert.IntToStr(RowIdx)+' was expanded.')
    else Log.Message('The row '+aqConvert.IntToStr(RowIdx)+' cannot be expanded.');
  
  if CollapseRow(Grid, nil, RowIdx) then 
         Log.Message('The row '+aqConvert.IntToStr(RowIdx)+' was collapsed.')
    else Log.Message('The row '+aqConvert.IntToStr(RowIdx)+' cannot be collapsed.'); 
end;
C++Script, C#Script
function ExpandRow(Grid, View, RowIdx)
{
  // Obtain the row object
  Row = GetRow(Grid, View, RowIdx)
  
  if (Row != null)
    {
    // Check whether a row can be expanded
    if (Row["IsExpandable"]) 
      {
      Row["Expanded"] = true
      return true
      }
    }
   return false 
}
function CollapseRow(Grid, View, RowIdx)
{
  // Obtain the row object
  Row = GetRow(Grid, View, RowIdx)
  
  if (Row != null)
    {
    // Check whether a row can be collapsed
    if (Row["IsExpandable"]) 
      {
      Row["Expanded"] = false
      return true
      }
    }
   return false 
}
function TestExpandCollapse()
{
var Grid;
  RowIdx=0
  // Obtain the grid object
  Grid = Sys["Process"]("SamplesExplorer")["WinFormsObject"]("frmEmptyRows")["WinFormsObject"]("UltraGrid1");
  
  if (ExpandRow(Grid, null, RowIdx)) 
         Log["Message"]("The row "+RowIdx+" was expanded.")
    else Log["Message"]("The row "+RowIdx+" cannot be expanded.")  
  
  if (CollapseRow(Grid, null, RowIdx)) 
         Log["Message"]("The row "+RowIdx+" was collapsed.")
    else Log["Message"]("The row "+RowIdx+" cannot be collapsed.")
}
See Also
Working With Infragistics UltraGrid
Accessing Grid Elements in Infragistics UltraGrid
Selecting Multiple Rows in Infragistics UltraGrid
Obtaining Selected Elements in Infragistics UltraGrid
Expand Action (Grid Controls)
Collapse Action (Grid Controls)
wExpanded Property (Grid Controls)

 Using the Expand and Collapse Actions of InfragisticsUltraGridView and Infragistics UltraGrid Objects
Using the Expand and Collapse Actions of InfragisticsUltraGridView and Infragistics UltraGrid Objects View description
View description