One of the actions that you will perform the most often over a grid is selecting cells. This topic provides an example that selects cells of the QuantumGrid control.
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 |
Simulating Clicks on Cells
You can select a particular grid cell by simulating a mouse click on that cell. To simulate cell clicks, use the ClickCell
, DblClickCell
, ClickCellR
and similar actions of the DevExpressQuantumGrid
object or the DevExpressQuantumGridLevel
object that corresponds to a grid’s child level. All of these actions have parameters that specify the grid view, row (card) and column (card field) that contain the desired cell. They also have an additional parameter that specifies the key or a combination of keys (Ctrl, Alt, Shift) that are pressed during the simulation of a click.
Below is an example that demonstrates how you can simulate clicks on grid cells:
JavaScript, JScript
function Main ()
{
var p, Grid;
// Obtain the grid object
p = Sys.Process("Project1");
Grid = p.VCLObject("Form1").VCLObject("cxGrid1");
// Click some cells
Grid.ClickCell (0, "Company");
Grid.ClickCell (0, "First Name");
Grid.ClickCell (0, "Last Name");
}
Python
def Main ():
# Obtain the grid object
p = Sys.Process("Project1")
Grid = p.VCLObject("Form1").VCLObject("cxGrid1")
# Click some cells
Grid.ClickCell (0, "Company")
Grid.ClickCell (0, "First Name")
Grid.ClickCell (0, "Last Name")
VBScript
Sub Main
Dim p, Grid
' Obtain the grid object
Set p = Sys.Process("Project1")
Set Grid = p.VCLObject("Form1").VCLObject("cxGrid1")
' Click some cells
Call Grid.ClickCell (0, "Company")
Call Grid.ClickCell (0, "First Name")
Call Grid.ClickCell (0, "Last Name")
End Sub
DelphiScript
procedure Main;
var p, Grid : OleVariant;
begin
// Obtain the grid object
p := Sys.Process('Project1');
Grid := p.VCLObject('Form1').VCLObject('cxGrid1');
// Click some cells
Grid.ClickCell (0, 'Company');
Grid.ClickCell (0, 'First Name');
Grid.ClickCell (0, 'Last Name');
end;
C++Script, C#Script
function Main ()
{
var p, Grid;
// Obtain the grid object
p = Sys["Process"]("Project1");
Grid = p["VCLObject"]("Form1")["VCLObject"]("cxGrid1");
// Click some cells
Grid.ClickCell (0, "Company");
Grid.ClickCell (0, "First Name");
Grid.ClickCell (0, "Last Name");
}
Using TcxGrid Internal Properties
You can also select grid cells using internal properties of the TcxGrid object (TcxGrid is the class name of the QuantumGrid control):
ViewObj.Controller.FocusedColumn
orViewObj.Controller.FocusedColumnIndex
- Using these properties you can move the focus to the specified column or obtain the column object that corresponds to the focused column in a view (the QuantumGrid control can contain several row levels. Each level has a view that defines how the data is displayed. See also Getting Views in Developer Express QuantumGrid).
TheFocusedColumn
property returns the column object. TheFocusedColumnIndex
property returns the index (zero-based) of the focused column.ViewObj.Controller.FocusedRowIndex
- Specifies the index of the focused row for a view.GridObj.ActiveView
- Returns the “native” view object corresponding to the root level.
In order for you to be able to use these properties, the property code must be included into the application’s binary file. The problem is that Delphi’s (or C++Builder’s) smart linker excludes methods and properties that are not used within the application. So, it is possible that the mentioned properties are not included into the application’s executable, or the application provides limited access to them (for instance, a read/write property can be seen as read-only or write-only).
To solve the problem, you can create a virtual method in your code that will call the needed properties. For example, you can use the following code: Delphi interface C++Builder /* MyUnit.h */ In the example, we typecast the |
Note that the cell selection is only possible if the grid displays data in cell selection mode. This mode is active, if the view’s OptionsView.CellSelect
is set to False. If you are not sure which mode the tested grid functions, you may ask the tested application’s developer. Also, you can determine the mode visually by watching the grid’s behavior when you are navigating through the records. If the grid highlights whole rows rather than individual cells, then the row selection mode is active and you cannot simulate the cell selection.
Example
JavaScript
function Main ()
{
var p, Grid;
// Obtain the grid object
p = Sys.Process("Project1");
Grid = p.VCLObject("Form1").VCLObject("cxGrid1");
// Select some cells
SelectCell (Grid, null, 0, "Company");
SelectCell (Grid, null, 2, "First Name");
SelectCell (Grid, null, 3, "Last Name");
}
// Select the specified grid cell
function SelectCell (Grid, View, RowIndex, ColumnId)
{
// Obtain the view object
if (strictEqual(View, null))
View = Grid.ActiveView;
// Select the cell's row and column
View.Controller.FocusedRowIndex = RowIndex;
View.Controller.FocusedColumn = GetColumn (Grid, View, ColumnId);
}
// Obtain the column object
function GetColumn (Grid, View, ColumnId)
{
// Obtain the view object
if (strictEqual(View, null))
View = Grid.ActiveView;
// Check type of the columnId parameter
if (equal(aqObject.GetVarType(ColumnId), varOleStr))
{
// If ColumnId is a string,
// then search for the column by its caption
for (let i = 0; i < View.ColumnCount; i++)
if (equal(View.Columns(i).Caption, ColumnId))
return View.Columns(i); // Column id found
return null; // Column is not found
}
else
// If ColumnId is an integer,
// then search for column by its index
return View.Columns(ColumnId);
}
JScript
function Main ()
{
var p, Grid;
// Obtain the grid object
p = Sys.Process("Project1");
Grid = p.VCLObject("Form1").VCLObject("cxGrid1");
// Select some cells
SelectCell (Grid, null, 0, "Company");
SelectCell (Grid, null, 2, "First Name");
SelectCell (Grid, null, 3, "Last Name");
}
// Select the specified grid cell
function SelectCell (Grid, View, RowIndex, ColumnId)
{
// Obtain the view object
if (View == null)
View = Grid.ActiveView;
// Select the cell's row and column
View.Controller.FocusedRowIndex = RowIndex;
View.Controller.FocusedColumn = GetColumn (Grid, View, ColumnId);
}
// Obtain the column object
function GetColumn (Grid, View, ColumnId)
{
// Obtain the view object
if (View == null)
View = Grid.ActiveView;
// Check type of the columnId parameter
if (aqObject.GetVarType(ColumnId) == varOleStr)
{
// If ColumnId is a string,
// then search for the column by its caption
for (var i = 0; i < View.ColumnCount; i++)
if (View.Columns(i).Caption == ColumnId)
return View.Columns(i); // Column id found
return null; // Column is not found
}
else
// If ColumnId is an integer,
// then search for column by its index
return View.Columns(ColumnId);
}
Python
def Main ():
# Obtain the grid object
p = Sys.Process("Project1")
Grid = p.VCLObject("Form1").VCLObject("cxGrid1")
# Select some cells
SelectCell (Grid, None, 0, "Company")
SelectCell (Grid, None, 2, "First Name")
SelectCell (Grid, None, 3, "Last Name")
# Select the specified grid cell
def SelectCell (Grid, View, RowIndex, ColumnId):
# Obtain the view object
if (View == None):
View = Grid.ActiveView
# Select the cell's row and column
View.Controller.FocusedRowIndex = RowIndex
View.Controller.FocusedColumn = GetColumn (Grid, View, ColumnId)
# Obtain the column object
def GetColumn (Grid, View, ColumnId):
# Obtain the view object
if (View == None):
View = Grid.ActiveView
# Check type of the columnId parameter
if (aqObject.GetVarType(ColumnId) == varOleStr):
# If ColumnId is a string,
# then search for the column by its caption
for i in range(0, View.ColumnCount-1):
if (View.Columns[i].Caption == ColumnId):
return View.Columns[i] # Column id found
return None # Column is not found
else:
# If ColumnId is an integer,
# then search for column by its index
return View.Columns(ColumnId)
VBScript
Sub Main
Dim p, Grid
' Obtain the grid object
Set p = Sys.Process("Project1")
Set Grid = p.VCLObject("Form1").VCLObject("cxGrid1")
' Select some cells
Call SelectCell (Grid, Nothing, 0, "Company")
Call SelectCell (Grid, Nothing, 2, "First Name")
Call SelectCell (Grid, Nothing, 3, "Last Name")
End Sub
' Select the specified grid cell
Sub SelectCell (Grid, View, RowIndex, ColumnId)
' Obtain the view object
If View Is Nothing Then
Set View = Grid.ActiveView
End If
' Select the cell's row and column
View.Controller.FocusedRowIndex = RowIndex
Set View.Controller.FocusedColumn = GetColumn (Grid, View, ColumnId)
End Sub
' Obtain the column object
Function GetColumn (Grid, View, ColumnId)
Dim i
' Obtain the view object
If View Is Nothing Then
Set View = Grid.ActiveView
End If
' Check type of the columnId parameter
If aqObject.GetVarType(ColumnId) = varOleStr Then
' If ColumnId is a string,
' then search for the column by its caption
For i = 0 to View.ColumnCount-1
If View.Columns(i).Caption = ColumnId Then
Set GetColumn = View.Columns(i) ' Column id found
Exit Function
End If
Next
Set GetColumn = Nothing' Column is not found
Else
' If ColumnId is an integer,
' then search for column by its index
Set GetColumn = View.Columns(ColumnId)
End If
End Function
DelphiScript
procedure SelectCell (Grid, View, RowIndex, ColumnId); forward;
function GetColumn (Grid, View, ColumnId); forward;
procedure Main;
var p, Grid : OleVariant;
begin
// Obtain the grid object
p := Sys.Process('Project1');
Grid := p.VCLObject('Form1').VCLObject('cxGrid1');
// Select some cells
SelectCell (Grid, nil, 0, 'Company');
SelectCell (Grid, nil, 2, 'First Name');
SelectCell (Grid, nil, 3, 'Last Name');
end;
// Select the specified grid cell
procedure SelectCell (Grid, View, RowIndex, ColumnId);
begin
// Obtain the view object
if View = nil then
View := Grid.ActiveView;
// Select the cell's row and column
View.Controller.FocusedRowIndex := RowIndex;
View.Controller.FocusedColumn := GetColumn (Grid, View, ColumnId);
end;
// Obtain the column object
function GetColumn (Grid, View, ColumnId);
var i : OleVariant;
begin
// Obtain the view object
if View = nil then
View := Grid.ActiveView;
// Check type of the columnId parameter
if aqObject.GetVarType(ColumnId) = varOleStr then
begin
// If ColumnId is a string,
// then search for the column by its caption
for i := 0 to View.ColumnCount-1 do
if View.Columns[i].Caption = ColumnId then
begin
Result := View.Columns[i]; // Column id found
Exit;
end;
Result := nil; // Column is not found
end
else
// If ColumnId is an integer,
// then search for column by its index
Result := View.Columns[ColumnId];
end;
C++Script, C#Script
function Main ()
{
var p, Grid;
// Obtain the grid object
p = Sys["Process"]("Project1");
Grid = p["VCLObject"]("Form1")["VCLObject"]("cxGrid1");
// Select some cells
SelectCell (Grid, null, 0, "Company");
SelectCell (Grid, null, 2, "First Name");
SelectCell (Grid, null, 3, "Last Name");
}
// Select the specified grid cell
function SelectCell (Grid, View, RowIndex, ColumnId)
{
// Obtain the view object
if (View == null)
View = Grid["ActiveView"];
// Select the cell's row and column
View["Controller"]["FocusedRowIndex"] = RowIndex;
View["Controller"]["FocusedColumn"] = GetColumn (Grid, View, ColumnId);
}
// Obtain the column object
function GetColumn (Grid, View, ColumnId)
{
// Obtain the view object
if (View == null)
View = Grid["ActiveView"];
// Check type of the columnId parameter
if (aqObject["GetVarType"](ColumnId) == varOleStr)
{
// If ColumnId is a string,
// then search for the column by its caption
for (var i = 0; i < View["ColumnCount"]; i++)
if (View["Columns"](i)["Caption"] == ColumnId)
return View["Columns"](i); // Column id found
return null; // Column is not found
}
else
// If ColumnId is an integer,
// then search for column by its index
return View["Columns"](ColumnId);
}
See Also
Working With Developer Express QuantumGrid
Activating In-place Editors in Developer Express QuantumGrid
Obtaining and Setting Cell Values in Developer Express QuantumGrid
Selecting Multiple Rows in Developer Express QuantumGrid
ClickCell Action (Specific to DevExpressQuantumGrid Controls)