The data displayed by the UltraGrid control can be sorted by one or several columns. This topic describes the approaches that can be used to sort the grid data from test scripts:
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 |
Simulating Column Header Clicks
Typically, users specify the sorting column and change the direction (ascending or descending) by clicking the column caption. Subsequent clicks on the same header switch the sort direction. After a click, the previous sort conditions are replaced with sorting by the clicked column. In order to sort the data by this column preserving other sort conditions, you should hold the Shift key while clicking the column header.
You can simulate clicks over the UltraGrid column headers using the ClickColumnHeader
action either of InfragisticsUltraGrid
or InfragisticsUltraGridView
objects. The action of the InfragisticsUltraGrid
object applies to headers of the main data view, whereas the InfragisticsUltraGridView
action affect the headers of the respective child data view. Note that it is only possible to simulate clicks on column headers if they are displayed, that is, if the view’s UltraGridBandObj.ColHeadersVisible
property is True. If this property is False, the column headers are hidden, so an attempt to simulate a click on them will cause an error.
The example below demonstrates how you can sort data in the UltraGrid control by simulating clicks on column headers.
Note: | This example works with the SamplesExplorer application that is shipped with the Infragistics NetAdvantage Suite. |
JavaScript, JScript
function ColumnClickSorting()
{
var p, Grid
// Obtain the application process
p = Sys.Process("SamplesExplorer");
// Select the "Merged Cells Feature" demo
p.frmMain.WinFormsObject("tvwSamples").DblClickItem("|Feature Samples|V5.1 Merged Cells Feature");
// Obtain the grid control
Grid = p.frmMergedCells.WinFormsObject("UltraGrid1");
// Sort the root table data
Grid.ClickColumnHeader("Country");
Grid.ClickColumnHeader("City", skShift);
// Display the child table of the first row
Grid.Expand(0);
// Sort the child table data
Grid.wChildView(0).ClickColumnHeader("CustomerID");
}
Python
def ColumnClickSorting():
# Obtain the application process
p = Sys.Process("SamplesExplorer")
# Select the "Merged Cells Feature" demo
p.frmMain.WinFormsObject("tvwSamples").DblClickItem("|Feature Samples|V5.1 Merged Cells Feature")
# Obtain the grid control
Grid = p.frmMergedCells.WinFormsObject("UltraGrid1")
# Sort the root table data
Grid.ClickColumnHeader("Country")
Grid.ClickColumnHeader("City", skShift)
# Display the child table of the first row
Grid.Expand(0)
# Sort the child table data
Grid.wChildView[0].ClickColumnHeader("CustomerID")
VBScript
Sub ColumnClickSorting
Dim p
Dim Grid
' Obtain the application process
Set p = Sys.Process("SamplesExplorer")
' Select the "Merged Cells Feature" demo
Call p.frmMain.WinFormsObject("tvwSamples").DblClickItem("|Feature Samples|V5.1 Merged Cells Feature")
' Obtain the grid control
Set Grid = p.frmMergedCells.WinFormsObject("UltraGrid1")
' Sort the root table data
Call Grid.ClickColumnHeader("Country")
Call Grid.ClickColumnHeader("City", skShift)
' Display the child table of the first row
Call Grid.Expand(0)
' Sort the child table data
Call Grid.wChildView(0).ClickColumnHeader("CustomerID")
End Sub
DelphiScript
procedure ColumnClickSorting;
var p, Grid: OleVariant;
begin
// Obtain the application process
p := Sys.Process('SamplesExplorer');
// Select the "Merged Cells Feature" demo
p.frmMain.WinFormsObject('tvwSamples').DblClickItem('|Feature Samples|V5.1 Merged Cells Feature');
// Obtain the grid control
Grid := p.frmMergedCells.WinFormsObject('UltraGrid1');
// Sort the root table data
Grid.ClickColumnHeader('Country');
Grid.ClickColumnHeader('City', skShift);
// Display the child table of the first row
Grid.Expand(0);
// Sort the child table data
Grid.wChildView[0].ClickColumnHeader('CustomerID');
end;
C++Script, C#Script
function ColumnClickSorting()
{
var p, Grid
// Obtain the application process
p = Sys["Process"]("SamplesExplorer");
// Select the "Merged Cells Feature" demo
p["frmMain"]["WinFormsObject"]("tvwSamples")["DblClickItem"]("|Feature Samples|V5.1 Merged Cells Feature");
// Obtain the grid control
Grid = p["frmMergedCells"]["WinFormsObject"]("UltraGrid1");
// Sort the root table data
Grid["ClickColumnHeader"]("Country");
Grid["ClickColumnHeader"]("City", skShift);
// Display the child table of the first row
Grid["Expand"](0);
// Sort the child table data
Grid["wChildView"](0)["ClickColumnHeader"]("CustomerID");
}
Using UltraGrid Internal Members
The drawback of the previous approach is that the initial sort order of a column is unknown. To determine the sort order you should read the SortIndicator
property of the internal UltraGridColumn
object.
To obtain the UltraGridColumn
object that corresponds to the desired column, you can use the GetColumn
routine whose code is given in the Accessing Grid Elements in Infragistics UltraGrid topic. It retrieves a column specified by the caption or by the visible position in a grid.
The SortIndicator
property can accept the following string values:
- Ascending - Denotes that a column is sorted ascending.
- Descending - Senotes that a column is sorted descending.
- None - Denotes that a column is not sorted.
- Disabled - Denotes that the column cannot be sorted.
Note that assigning the column’s SortIndicator
property does not automatically cancel sorting by other column(s).
Example
JavaScript
function Main()
{
var p, Grid;
// Obtain the grid object
p = Sys.Process("SamplesExplorer");
Grid = p.WinFormsObject("frmSort").WinFormsObject("UltraGrid1");
// Manipulate column sorting
ColumnSortAscending(Grid, null, "Name");
ColumnSortDisabled(Grid, null, "Name");
ColumnSortDescending(Grid, null, "Shuttle_ID");
ColumnSortReset(Grid, null, "Name");
}
function ColumnSortAscending(grid, childBand, columnId)
{
// Obtain the row object
let Column = GetColumn(grid, childBand, columnId)
if (!strictEqual(Column, null))
// Set the desired sorting state
Column.SortIndicator = "Ascending";
}
function ColumnSortDescending(grid, childBand, columnId)
{
// Obtain the row object
let Column = GetColumn(grid, childBand, columnId)
if (!strictEqual(Column, null))
// Set the desired sorting state
Column.SortIndicator = "Descending";
}
function ColumnSortReset(grid, childBand, columnId)
{
// Obtain the row object
let Column = GetColumn(grid, childBand, columnId)
if (!strictEqual(Column, null))
// Set the desired sorting state
Column.SortIndicator = "None";
}
function ColumnSortDisabled(grid, childBand, columnId)
{
// Obtain the row object
let Column = GetColumn(grid, childBand, columnId)
if (!strictEqual(Column, null))
// Set the desired sorting state
Column.SortIndicator = "Disabled";
}
JScript
function Main()
{
var p, Grid;
// Obtain the grid object
p = Sys.Process("SamplesExplorer");
Grid = p.WinFormsObject("frmSort").WinFormsObject("UltraGrid1");
// Manipulate column sorting
ColumnSortAscending(Grid, null, "Name");
ColumnSortDisabled(Grid, null, "Name");
ColumnSortDescending(Grid, null, "Shuttle_ID");
ColumnSortReset(Grid, null, "Name");
}
function ColumnSortAscending(grid, childBand, columnId)
{
// Obtain the row object
var Column = GetColumn(grid, childBand, columnId)
if (Column != null)
// Set the desired sorting state
Column.SortIndicator = "Ascending";
}
function ColumnSortDescending(grid, childBand, columnId)
{
// Obtain the row object
var Column = GetColumn(grid, childBand, columnId)
if (Column != null)
// Set the desired sorting state
Column.SortIndicator = "Descending";
}
function ColumnSortReset(grid, childBand, columnId)
{
// Obtain the row object
var Column = GetColumn(grid, childBand, columnId)
if (Column != null)
// Set the desired sorting state
Column.SortIndicator = "None";
}
function ColumnSortDisabled(grid, childBand, columnId)
{
// Obtain the row object
var Column = GetColumn(grid, childBand, columnId)
if (Column != null)
// Set the desired sorting state
Column.SortIndicator = "Disabled";
}
Python
def Main():
# Obtain the grid object
p = Sys.Process("SamplesExplorer")
Grid = p.WinFormsObject("frmSort").WinFormsObject("UltraGrid1")
# Manipulate column sorting
ColumnSortAscending(Grid, None, "Name")
ColumnSortDisabled(Grid, None, "Name")
ColumnSortDescending(Grid, None, "Shuttle_ID")
ColumnSortReset(Grid, None, "Name")
def ColumnSortAscending(grid, childBand, columnId):
# Obtain the row object
Column = GetColumn(grid, childBand, columnId)
if (Column != None):
# Set the desired sorting state
Column.SortIndicator = "Ascending"
def ColumnSortDescending(grid, childBand, columnId):
# Obtain the row object
Column = GetColumn(grid, childBand, columnId)
if (Column != None):
# Set the desired sorting state
Column.SortIndicator = "Descending"
def ColumnSortReset(grid, childBand, columnId):
# Obtain the row object
Column = GetColumn(grid, childBand, columnId)
if (Column != None):
# Set the desired sorting state
Column.SortIndicator = "None"
def ColumnSortDisabled(grid, childBand, columnId):
# Obtain the row object
Column = GetColumn(grid, childBand, columnId)
if (Column != None):
# Set the desired sorting state
Column.SortIndicator = "Disabled"
VBScript
Sub Main
' Obtain the grid object
Set p = Sys.Process("SamplesExplorer")
Set Grid = p.WinFormsObject("frmSort").WinFormsObject("UltraGrid1")
' Manipulate column sorting
Call ColumnSortAscending(Grid, Nothing, "Name")
Call ColumnSortDisabled(Grid, Nothing, "Name")
Call ColumnSortDescending(Grid, Nothing, "Shuttle_ID")
Call ColumnSortReset(Grid, Nothing, "Name")
End Sub
Sub ColumnSortAscending(grid, childBand, columnId)
' Obtain the specified column
Set Column = GetColumn(grid, childBand, columnId)
If Not Column Is Nothing Then
' Set the desired sorting state
Column.SortIndicator = "Ascending"
End If
End Sub
Sub ColumnSortDescending(grid, childBand, columnId)
' Obtain the specified column
Set Column = GetColumn(grid, childBand, columnId)
If Not Column Is Nothing Then
' Set the desired sorting state
Column.SortIndicator = "Descending"
End If
End Sub
Sub ColumnSortReset(grid, childBand, columnId)
' Obtain the specified column
Set Column = GetColumn(grid, childBand, columnId)
If Not Column Is Nothing Then
' Set the desired sorting state
Column.SortIndicator = "None"
End If
End Sub
Sub ColumnSortDisabled(grid, childBand, columnId)
' Obtain the specified column
Set Column = GetColumn(grid, childBand, columnId)
If Not Column Is Nothing Then
' Set the desired sorting state
Column.SortIndicator = "Disabled"
End If
End Sub
DelphiScript
procedure ColumnSortAscending(grid, childBand, columnId); forward;
procedure ColumnSortDescending(grid, childBand, columnId); forward;
procedure ColumnSortReset(grid, childBand, columnId); forward;
procedure ColumnSortDisabled(grid, childBand, columnId); forward;
procedure Main;
var p, Grid: Variant;
begin
// Obtain the grid object
p := Sys.Process('SamplesExplorer');
Grid := p.WinFormsObject('frmSort').WinFormsObject('UltraGrid1');
// Manipulate column sorting
ColumnSortAscending(Grid, nil, 'Name');
ColumnSortDisabled(Grid, nil, 'Name');
ColumnSortDescending(Grid, nil, 'Shuttle_ID');
ColumnSortReset(Grid, nil, 'Name');
end;
procedure ColumnSortAscending(grid, childBand, columnId);
var
Column: Variant;
begin
// Obtain the specified column
Column := GetColumn(grid, childBand, columnId);
if Column <> nil then
// Set the desired sorting state
Column.SortIndicator := 'Ascending';
end;
procedure ColumnSortDescending(grid, childBand, columnId);
var
Column: Variant;
begin
// Obtain the specified column
Column := GetColumn(grid, childBand, columnId);
if Column <> nil then
// Set the desired sorting state
Column.SortIndicator := 'Descending';
end;
procedure ColumnSortReset(grid, childBand, columnId);
var
Column: Variant;
begin
// Obtain the specified column
Column := GetColumn(grid, childBand, columnId);
if Column <> nil then
// Set the desired sorting state
Column.SortIndicator := 'None';
end;
procedure ColumnSortDisabled(grid, childBand, columnId);
var
Column: Variant;
begin
// Obtain the specified column
Column := GetColumn(grid, childBand, columnId);
if Column <> nil then
// Set the desired sorting state
Column.SortIndicator := 'Disabled';
end;
C++Script, C#Script
function Main()
{
var p, Grid;
// Obtain the grid object
p = Sys["Process"]("SamplesExplorer");
Grid = p["WinFormsObject"]("frmSort")["WinFormsObject"]("UltraGrid1");
// Manipulate column sorting
ColumnSortAscending(Grid, null, "Name");
ColumnSortDisabled(Grid, null, "Name");
ColumnSortDescending(Grid, null, "Shuttle_ID");
ColumnSortReset(Grid, null, "Name");
}
function ColumnSortAscending(grid, childBand, columnId)
{
// Obtain the row object
var Column = GetColumn(grid, childBand, columnId)
if (Column != null)
// Set the desired sorting state
Column["SortIndicator"] = "Ascending";
}
function ColumnSortDescending(grid, childBand, columnId)
{
// Obtain the row object
var Column = GetColumn(grid, childBand, columnId)
if (Column != null)
// Set the desired sorting state
Column["SortIndicator"] = "Descending";
}
function ColumnSortReset(grid, childBand, columnId)
{
// Obtain the row object
var Column = GetColumn(grid, childBand, columnId)
if (Column != null)
// Set the desired sorting state
Column["SortIndicator"] = "None";
}
function ColumnSortDisabled(grid, childBand, columnId)
{
// Obtain the row object
var Column = GetColumn(grid, childBand, columnId)
if (Column != null)
// Set the desired sorting state
Column["SortIndicator"] = "Disabled";
}
See Also
Working With Infragistics UltraGrid
Accessing Grid Elements in Infragistics UltraGrid
ClickColumnHeader Action (Grid Controls)