Syncfusion's GridControl offers a variety of cell types: combo boxes, check boxes, radio buttons, spin boxes and cells with various drop-down editors. In the Obtaining and Setting Cell Values in Syncfusion GridControl topic, we defined the SetCellValue
and InputCellValue
routines that can be used to change grid cell values in general. However, you may need to modify the cell value in a specific way, for example, increase the value using the spin buttons, or simulate actions in the cell’s dropdown editor.
Generally, there are two approaches to modifying GridControl cell values:
- Simulating user actions over cells, for example, clicking a cell’s check boxes and radio buttons.
- Using internal properties and methods of the GridControl object.
The first approach is cumbersome, whereas, the second one is easier to implement. However, the first approach may be more preferable because it performs “real” actions over the grid and triggers the corresponding events of the grid control, like during normal application usage by the end users. When you modify cell values using the corresponding properties and methods of the grid control, events bound to user actions are not fired, so in this case the tested application may behave differently from what you expect.
The following sections explain how to perform typical operations over certain types of GridControl cells.
To perform these actions, TestComplete should have access to internal objects, properties and methods of the GridControl object. For this purpose, the .NET Application Support plugin must be installed and enabled. When testing Syncfusion GridControl controls, use specific methods and properties of the corresponding |
Clicking In-place Editors' Buttons
The GridControl can contain cells with embedded buttons, for example: cells with radio buttons or spin buttons, combo box cells and cells with drop-down editors. The cell buttons are usually used to modify the cell value in a special way, invoke custom dialogs, or perform other actions, so you may need to “press” these buttons in your test scripts.
To simulate a mouse click on the buttons, use the Click
action. You need to know the desired button coordinates, which you can calculate using internal properties and methods of the GridControl object. The following example demonstrates how you can determine the cell’s button coordinates and simulate a button click.
Example
JavaScript, JScript
function Main ()
{
var p, Grid;
// Obtain the grid object
p = Sys.Process("CellButtons");
Grid = p.WinFormsObject("Form1").WinFormsObject("gridControl1");
// Click the cell's button
ClickCellButton (Grid, 5, 5, 0);
p.Window("#32770").Window("Button", "OK").ClickButton();
// Click the 2nd button
ClickCellButton (Grid, 7, 3, 2);
p.Window("#32770").Window("Button", "OK").ClickButton();
}
function ClickCellButton (Grid, RowIndex, ColIndex, ButtonIndex)
{
var CellRenderer, bounds;
// Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex);
// Get the button coordinates
CellRenderer = Grid.GetCellRenderer (RowIndex, ColIndex);
CellRenderer.PerformLayout (RowIndex, ColIndex);
bounds = CellRenderer.Buttons.Item(ButtonIndex).Bounds;
Grid.Click (bounds.X + bounds.Width/2, bounds.Y + bounds.Height/2);
}
Python
def Main ():
# Obtain the grid object
p = Sys.Process("CellButtons")
Grid = p.WinFormsObject("Form1").WinFormsObject("gridControl1")
# Click the cell's button
ClickCellButton (Grid, 5, 5, 0)
p.Window("#32770").Window("Button", "OK").ClickButton()
# Click the 2nd button
ClickCellButton (Grid, 7, 3, 2)
p.Window("#32770").Window("Button", "OK").ClickButton()
def ClickCellButton (Grid, RowIndex, ColIndex, ButtonIndex):
# Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex)
# Get the button coordinates
CellRenderer = Grid.GetCellRenderer (RowIndex, ColIndex)
CellRenderer.PerformLayout (RowIndex, ColIndex)
bounds = CellRenderer.Buttons.Item[ButtonIndex].Bounds
Grid.Click (bounds.X + bounds.Width/2, bounds.Y + bounds.Height/2)
VBScript
Sub Main
Dim p, Grid
' Obtain the grid object
Set p = Sys.Process("CellButtons")
Set Grid = p.WinFormsObject("Form1").WinFormsObject("gridControl1")
' Click the cell's button
Call ClickCellButton (Grid, 5, 5, 0)
p.Window("#32770").Window("Button", "OK").ClickButton
' Click the 2nd button
Call ClickCellButton (Grid, 7, 3, 2)
p.Window("#32770").Window("Button", "OK").ClickButton
End Sub
Sub ClickCellButton (Grid, RowIndex, ColIndex, ButtonIndex)
Dim CellRenderer, bounds
' Make cell visible
Call Grid.ScrollCellInView_3 (RowIndex, ColIndex)
' Get the button coordinates
Set CellRenderer = Grid.GetCellRenderer (RowIndex, ColIndex)
Call CellRenderer.PerformLayout (RowIndex, ColIndex)
Set bounds = CellRenderer.Buttons.Item(ButtonIndex).Bounds
Call Grid.Click (bounds.X + bounds.Width/2, bounds.Y + bounds.Height/2)
End Sub
DelphiScript
procedure ClickCellButton (Grid, RowIndex, ColIndex, ButtonIndex);
var CellRenderer, bounds : OleVariant;
begin
// Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex);
// Get the button coordinates
CellRenderer := Grid.GetCellRenderer (RowIndex, ColIndex);
CellRenderer.PerformLayout (RowIndex, ColIndex);
bounds := CellRenderer.Buttons.Item[ButtonIndex].Bounds;
Grid.Click (bounds.X + bounds.Width/2, bounds.Y + bounds.Height/2);
end;
procedure Main;
var p, Grid : OleVariant;
begin
// Obtain the grid object
p := Sys.Process('CellButtons');
Grid := p.WinFormsObject('Form1').WinFormsObject('gridControl1');
// Click the cell's button
ClickCellButton (Grid, 5, 5, 0);
p.Window('#32770').Window('Button', 'OK').ClickButton();
// Click the cell's 2nd button
ClickCellButton (Grid, 7, 3, 2);
p.Window('#32770').Window('Button', 'OK').ClickButton();
end;
C++Script, C#Script
function Main ()
{
var p, Grid;
// Obtain the grid object
p = Sys["Process"]("CellButtons");
Grid = p["WinFormsObject"]("Form1")["WinFormsObject"]("gridControl1");
// Click the cell's button
ClickCellButton (Grid, 5, 5, 0);
p["Window"]("#32770")["Window"]("Button", "OK")["ClickButton"]();
// Click the 2nd button
ClickCellButton (Grid, 7, 3, 2);
p["Window"]("#32770")["Window"]("Button", "OK")["ClickButton"]();
}
function ClickCellButton (Grid, RowIndex, ColIndex, ButtonIndex)
{
var CellRenderer, bounds;
// Make cell visible
Grid["ScrollCellInView_3"](RowIndex, ColIndex);
// Get the button coordinates
CellRenderer = Grid["GetCellRenderer"](RowIndex, ColIndex);
CellRenderer["PerformLayout"](RowIndex, ColIndex);
bounds = CellRenderer["Buttons"]["Item"](ButtonIndex)["Bounds"];
Grid["Click"](bounds["X"] + bounds["Width"]/2, bounds["Y"] + bounds["Height"]/2);
}
Working With CheckBox Cells
You can change the checked state of a CheckBox cell in the following ways:
- By simulating a mouse click on the check box using the
Click
action. - By selecting the cell and “pressing” the Space key using the
Keys
action. For more information on selecting cells in the GridControl, see Selecting Cells in Syncfusion GridControl. - By assigning the cell’s
CellValue
property the desired value: True (checked) or False (unchecked). If the check box works in the three-state mode (that is, if the cell’sTriState
property is True), you can also put the cell into an indeterminate state by assigning theCellValue
property with the corresponding value (usually, empty string). For more information on modifying cell values, see Obtaining and Setting Cell Values in Syncfusion GridControl.
The script sample below implements the first approach. It demonstrates how you can calculate the check box coordinates and simulate a mouse click on it.
Example
JavaScript, JScript
function Main ()
{
var p, Grid;
// Obtain the grid object
p = Sys.Process("CellControlsGrid");
Grid = p.WinFormsObject("CellControlsForm").WinFormsObject("gridControl1");
// Change the check box state
ClickCellCheckBox (Grid, 14, 1, true);
}
function ClickCellCheckBox (Grid, RowIndex, ColIndex, Checked)
{
var Cell, CellRenderer, bounds;
// Get the cell object
Cell = Grid.Item(RowIndex, ColIndex);
// Check if the cell contains a check box
if (Cell.CellType.OleValue == "CheckBox")
{
// Check if the current cell state is different from the desired one
if (! Cell.CellValue.Equals (aqConvert.VarToStr(Checked)))
{
// Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex);
// Get the check box coordinates
CellRenderer = Grid.GetCellRenderer (RowIndex, ColIndex);
CellRenderer.PerformLayout (RowIndex, ColIndex);
bounds = CellRenderer.GetCachedCheckerBounds (RowIndex, ColIndex);
Grid.Click (bounds.X + bounds.Width/2, bounds.Y + bounds.Height/2);
}
}
else
Log.Error ("Cell (" + RowIndex + ", " + ColIndex + ") does not contain a check box.");
}
Python
def Main ():
# Obtain the grid object
p = Sys.Process("CellControlsGrid")
Grid = p.WinFormsObject("CellControlsForm").WinFormsObject("gridControl1")
# Change the check box state
ClickCellCheckBox (Grid, 14, 1, True)
def ClickCellCheckBox (Grid, RowIndex, ColIndex, Checked):
# Get the cell object
Cell = Grid.Item(RowIndex, ColIndex)
# Check if the cell contains a check box
if (Cell.CellType.OleValue == "CheckBox"):
# Check if the current cell state is different from the desired one
if not Cell.CellValue.Equals (aqConvert.VarToStr(Checked)):
# Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex)
# Get the check box coordinates
CellRenderer = Grid.GetCellRenderer (RowIndex, ColIndex)
CellRenderer.PerformLayout (RowIndex, ColIndex)
bounds = CellRenderer.GetCachedCheckerBounds (RowIndex, ColIndex)
Grid.Click (bounds.X + bounds.Width/2, bounds.Y + bounds.Height/2)
else:
Log.Error ("Cell (" + RowIndex + ", " + ColIndex + ") does not contain a check box.")
VBScript
Sub Main
Dim p, Grid
' Obtain the grid object
Set p = Sys.Process("CellControlsGrid")
Set Grid = p.WinFormsObject("CellControlsForm").WinFormsObject("gridControl1")
' Change the check box state
Call ClickCellCheckBox (Grid, 14, 1, True)
End Sub
Sub ClickCellCheckBox (Grid, RowIndex, ColIndex, Checked)
Dim Cell, CellRenderer, bounds
' Get the cell object
Set Cell = Grid.Item(RowIndex, ColIndex)
' Check if the cell contains a check box
If Cell.CellType.OleValue = "CheckBox" Then
' Check if the current cell state is different from the desired one
If Not Cell.CellValue.Equals (aqConvert.VarToStr(Checked)) Then
' Make cell visible
Call Grid.ScrollCellInView_3 (RowIndex, ColIndex)
' Get the check box coordinates
Set CellRenderer = Grid.GetCellRenderer (RowIndex, ColIndex)
Call CellRenderer.PerformLayout (RowIndex, ColIndex)
Set bounds = CellRenderer.GetCachedCheckerBounds (RowIndex, ColIndex)
Call Grid.Click (bounds.X + bounds.Width/2, bounds.Y + bounds.Height/2)
End If
Else
Call Log.Error ("Cell (" & RowIndex & ", " & ColIndex & ") does not contain a check box.")
End If
End Sub
DelphiScript
procedure ClickCellCheckBox (Grid, RowIndex, ColIndex, Checked);
var Cell, CellRenderer, bounds : OleVariant;
begin
// Get the cell object
Cell := Grid.Item[RowIndex, ColIndex];
// Check if the cell contains a check box
if Cell.CellType.OleValue = 'CheckBox' then
begin
// Check if the current cell state is different from the desired one
if not Cell.CellValue.Equals (aqConvert.VarToStr(Checked)) then
begin
// Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex);
// Get the check box coordinates
CellRenderer := Grid.GetCellRenderer(RowIndex, ColIndex);
CellRenderer.PerformLayout (RowIndex, ColIndex);
bounds := CellRenderer.GetCachedCheckerBounds(RowIndex, ColIndex);
Grid.Click (bounds.X + bounds.Width/2, bounds.Y + bounds.Height/2);
end
end
else
Log.Error ('Cell (' + aqConvert.VarToStr(RowIndex) + ', ' + aqConvert.VarToStr(ColIndex) + ') does not contain a check box.');
end;
procedure Main;
var p, Grid : OleVariant;
begin
// Obtain the grid object
p := Sys.Process('CellControlsGrid');
Grid := p.WinFormsObject('CellControlsForm').WinFormsObject('gridControl1');
// Change the check box state
ClickCellCheckBox (Grid, 14, 1, true);
end;
C++Script, C#Script
function Main ()
{
var p, Grid;
// Obtain the grid object
p = Sys["Process"]("CellControlsGrid");
Grid = p["WinFormsObject"]("CellControlsForm")["WinFormsObject"]("gridControl1");
// Change the check box state
ClickCellCheckBox (Grid, 14, 1, true);
}
function ClickCellCheckBox (Grid, RowIndex, ColIndex, Checked)
{
var Cell, CellRenderer, bounds;
// Get the cell object
Cell = Grid["Item"](RowIndex, ColIndex);
// Check if the cell contains a check box
if (Cell["CellType"]["OleValue"] == "CheckBox")
{
// Check if the current cell state is different from the desired one
if (! Cell["CellValue"]["Equals"](aqConvert["VarToStr"](Checked)))
{
// Make cell visible
Grid["ScrollCellInView_3"](RowIndex, ColIndex);
// Get the check box coordinates
CellRenderer = Grid["GetCellRenderer"](RowIndex, ColIndex);
CellRenderer["PerformLayout"](RowIndex, ColIndex);
bounds = CellRenderer["GetCachedCheckerBounds"](RowIndex, ColIndex);
Grid["Click"](bounds["X"] + bounds["Width"]/2, bounds["Y"] + bounds["Height"]/2);
}
}
else
Log["Error"]("Cell (" + RowIndex + ", " + ColIndex + ") does not contain a check box.");
}
Working With RadioButton Cells
To change the selected radio button in a RadioButton cell, you can do any of the following:
- Simulate a mouse click on the desired radio button. For example, you can do this using the
ClickCellButton
routine defined above in the Clicking In-place Editors' Buttons section. - Select the cell and then use Right Arrow or Left Arrow keys to select the desired radio button. To simulate arrow key presses, use the
Keys
action. - Assign the zero-based index of the desired button to the cell’s
CellValue
property.
We use the first approach, in the example below, to simulate a click over the needed radio button.
Example
JavaScript, JScript
function Main ()
{
var p, Grid;
// Obtain the grid object
p = Sys.Process("RadioButtonCells");
Grid = p.WinFormsObject("Form1").WinFormsObject("panel1").WinFormsObject("splitterControl1").WinFormsObject("gridControl1");
// Select a radio button by caption
ClickCellRadioButton (Grid, 2, 2, "button 2");
// Select a radio button by index
ClickCellRadioButton (Grid, 4, 2, 1);
}
function ClickCellRadioButton (Grid, RowIndex, ColIndex, Item)
{
var Cell, ItemIndex;
// Check if the cell contains radio buttons
Cell = Grid.Item (RowIndex, ColIndex);
if (Cell.CellType.OleValue == "RadioButton")
{
// Determine the radio button index
if (aqObject.GetVarType (Item) == varOleStr)
ItemIndex = Cell.ChoiceList.IndexOf (Item);
else
ItemIndex = Item;
ClickCellButton (Grid, RowIndex, ColIndex, ItemIndex);
}
else
Log.Error ("Cell (" + RowIndex + ", " + ColIndex + ") does not contain radio buttons.");
}
function ClickCellButton (Grid, RowIndex, ColIndex, ButtonIndex)
{
var CellRenderer, bounds;
// Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex);
// Get button coordinates
CellRenderer = Grid.GetCellRenderer (RowIndex, ColIndex);
CellRenderer.PerformLayout (RowIndex, ColIndex);
bounds = CellRenderer.Buttons.Item(ButtonIndex).Bounds;
Grid.Click (bounds.X + bounds.Width/2, bounds.Y + bounds.Height/2);
}
Python
def Main ():
# Obtain the grid object
p = Sys.Process("RadioButtonCells")
Grid = p.WinFormsObject("Form1").WinFormsObject("panel1").WinFormsObject("splitterControl1").WinFormsObject("gridControl1")
# Select a radio button by caption
ClickCellRadioButton (Grid, 2, 2, "button 2")
# Select a radio button by index
ClickCellRadioButton (Grid, 4, 2, 1)
def ClickCellRadioButton (Grid, RowIndex, ColIndex, Item):
# Check if the cell contains radio buttons
Cell = Grid.Item (RowIndex, ColIndex)
if (Cell.CellType.OleValue == "RadioButton"):
# Determine the radio button index
if (aqObject.GetVarType (Item) == varOleStr):
ItemIndex = Cell.ChoiceList.IndexOf (Item)
else:
ItemIndex = Item
ClickCellButton (Grid, RowIndex, ColIndex, ItemIndex)
else:
Log.Error ("Cell (" + RowIndex + ", " + ColIndex + ") does not contain radio buttons.")
def ClickCellButton (Grid, RowIndex, ColIndex, ButtonIndex):
# Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex)
# Get button coordinates
CellRenderer = Grid.GetCellRenderer (RowIndex, ColIndex)
CellRenderer.PerformLayout (RowIndex, ColIndex)
bounds = CellRenderer.Buttons.Item[ButtonIndex].Bounds
Grid.Click (bounds.X + bounds.Width/2, bounds.Y + bounds.Height/2)
VBScript
Sub Main
Dim p, Grid
' Obtain the grid object
Set p = Sys.Process("RadioButtonCells")
Set Grid = p.WinFormsObject("Form1").WinFormsObject("panel1").WinFormsObject("splitterControl1").WinFormsObject("gridControl1")
' Select a radio button by caption
Call ClickCellRadioButton (Grid, 2, 2, "button 2")
' Select a radio button by index
Call ClickCellRadioButton (Grid, 4, 2, 1)
End Sub
Sub ClickCellRadioButton (Grid, RowIndex, ColIndex, Item)
Dim Cell, ItemIndex
' Check if the cell contains radio buttons
Set Cell = Grid.Item (RowIndex, ColIndex)
If Cell.CellType.OleValue = "RadioButton" Then
' Determine the radio button index
If aqObject.GetVarType (Item) = varOleStr Then
ItemIndex = Cell.ChoiceList.IndexOf (Item)
Else
ItemIndex = Item
End If
Call ClickCellButton (Grid, RowIndex, ColIndex, ItemIndex)
Else
Call Log.Error ("Cell (" & RowIndex & ", " & ColIndex & ") does not contain radio buttons.")
End If
End Sub
Sub ClickCellButton (Grid, RowIndex, ColIndex, ButtonIndex)
Dim CellRenderer, bounds
' Make cell visible
Call Grid.ScrollCellInView_3 (RowIndex, ColIndex)
' Get button coordinates
Set CellRenderer = Grid.GetCellRenderer (RowIndex, ColIndex)
Call CellRenderer.PerformLayout (RowIndex, ColIndex)
Set bounds = CellRenderer.Buttons.Item(ButtonIndex).Bounds
Call Grid.Click (bounds.X + bounds.Width/2, bounds.Y + bounds.Height/2)
End Sub
DelphiScript
procedure ClickCellRadioButton (Grid, RowIndex, ColIndex, Item); forward;
procedure ClickCellButton (Grid, RowIndex, ColIndex, ButtonIndex); forward;
procedure Main;
var p, Grid : OleVariant;
begin
// Obtain the grid object
p := Sys.Process('RadioButtonCells');
Grid := p.WinFormsObject('Form1').WinFormsObject('panel1').WinFormsObject('splitterControl1').WinFormsObject('gridControl1');
// Select a radio button by caption
ClickCellRadioButton (Grid, 2, 2, 'button 2');
// Select a radio button by index
ClickCellRadioButton (Grid, 4, 2, 1);
end;
procedure ClickCellRadioButton (Grid, RowIndex, ColIndex, Item);
var Cell, ItemIndex : OleVariant;
begin
// Check if the cell contains radio buttons
Cell := Grid.Item [RowIndex, ColIndex];
if Cell.CellType.OleValue = 'RadioButton' then
begin
// Determine the radio button index
if aqObject.GetVarType (Item) = varOleStr then
ItemIndex := Cell.ChoiceList.IndexOf (Item)
else
ItemIndex := Item;
ClickCellButton (Grid, RowIndex, ColIndex, ItemIndex);
end
else
Log.Error ('Cell (' + aqConvert.VarToStr(RowIndex) + ', ' + aqConvert.VarToStr(ColIndex) + ') does not contain radio buttons.');
end;
procedure ClickCellButton (Grid, RowIndex, ColIndex, ButtonIndex);
var CellRenderer, bounds : OleVariant;
begin
// Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex);
// Get button coordinates
CellRenderer := Grid.GetCellRenderer (RowIndex, ColIndex);
CellRenderer.PerformLayout (RowIndex, ColIndex);
bounds := CellRenderer.Buttons.Item[ButtonIndex].Bounds;
Grid.Click (bounds.X + bounds.Width/2, bounds.Y + bounds.Height/2);
end;
C++Script, C#Script
function Main ()
{
var p, Grid;
// Obtain the grid object
p = Sys["Process"]("RadioButtonCells");
Grid = p["WinFormsObject"]("Form1")["WinFormsObject"]("panel1")["WinFormsObject"]("splitterControl1")["WinFormsObject"]("gridControl1");
// Select a radio button by caption
ClickCellRadioButton (Grid, 2, 2, "button 2");
// Select a radio button by index
ClickCellRadioButton (Grid, 4, 2, 1);
}
function ClickCellRadioButton (Grid, RowIndex, ColIndex, Item)
{
var Cell, ItemIndex;
// Check if the cell contains radio buttons
Cell = Grid["Item"](RowIndex, ColIndex);
if (Cell["CellType"]["OleValue"] == "RadioButton")
{
// Determine the radio button index
if (aqObject["GetVarType"] (Item) == varOleStr)
ItemIndex = Cell["ChoiceList"]["IndexOf"](Item);
else
ItemIndex = Item;
ClickCellButton (Grid, RowIndex, ColIndex, ItemIndex);
}
else
Log["Error"]("Cell (" + RowIndex + ", " + ColIndex + ") does not contain radio buttons.");
}
function ClickCellButton (Grid, RowIndex, ColIndex, ButtonIndex)
{
var CellRenderer, bounds;
// Make cell visible
Grid["ScrollCellInView_3"](RowIndex, ColIndex);
// Get button coordinates
CellRenderer = Grid["GetCellRenderer"](RowIndex, ColIndex);
CellRenderer["PerformLayout"](RowIndex, ColIndex);
bounds = CellRenderer["Buttons"]["Item"](ButtonIndex)["Bounds"];
Grid["Click"](bounds["X"] + bounds["Width"]/2, bounds["Y"] + bounds["Height"]/2);
}
Working With PushButton Cells
You can “press” a PushButton cell by simulating a mouse click on it. In the Selecting Cells in Syncfusion GridControl topic, we have explained how you can simulate cell clicks. The following example uses the ClickCell
routine from that topic to perform a click on a PushButton cell.
Example
JavaScript, JScript
function Main ()
{
var p, Grid;
// Obtain the application process and the grid object
p = Sys.Process("CellControlsGrid");
Grid = p.WinFormsObject("CellControlsForm").WinFormsObject("gridControl1");
// Click a push button
ClickCell (Grid, 17, 3);
// Simulate actions in the popup window
p.Window("#32770").Window("Button", "OK").ClickButton();
}
function ClickCell (Grid, RowIndex, ColIndex)
{
// Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex);
// Get cell coordinates
var rect = Grid.RangeInfoToRectangle (Grid.GridCellsRange.Cell(RowIndex, ColIndex));
Grid.Click (rect.X + rect.Width/2, rect.Y + rect.Height/2);
}
Python
def Main ():
# Obtain the application process and the grid object
p = Sys.Process("CellControlsGrid")
Grid = p.WinFormsObject("CellControlsForm").WinFormsObject("gridControl1")
# Click a push button
ClickCell (Grid, 17, 3)
# Simulate actions in the popup window
p.Window("#32770").Window("Button", "OK").ClickButton()
def ClickCell (Grid, RowIndex, ColIndex):
# Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex)
# Get cell coordinates
rect = Grid.RangeInfoToRectangle (Grid.GridCellsRange.Cell[RowIndex, ColIndex])
Grid.Click (rect.X + rect.Width/2, rect.Y + rect.Height/2)
VBScript
Sub Main
Dim p, Grid
' Obtain the application process and the grid object
Set p = Sys.Process("CellControlsGrid")
Set Grid = p.WinFormsObject("CellControlsForm").WinFormsObject("gridControl1")
' Click a push button
Call ClickCell (Grid, 17, 3)
' Simulate actions in the popup window
p.Window("#32770").Window("Button", "OK").ClickButton
End Sub
Sub ClickCell (Grid, RowIndex, ColIndex)
Dim rect
' Make cell visible
Call Grid.ScrollCellInView_3 (RowIndex, ColIndex)
' Get cell coordinates
Set rect = Grid.RangeInfoToRectangle (Grid.GridCellsRange.Cell(RowIndex, ColIndex))
Call Grid.Click (rect.X + rect.Width/2, rect.Y + rect.Height/2)
End Sub
DelphiScript
procedure ClickCell (Grid, RowIndex, ColIndex);
var rect : OleVariant;
begin
// Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex);
// Get cell coordinates
rect := Grid.RangeInfoToRectangle (Grid.GridCellsRange.Cell(RowIndex, ColIndex));
Grid.Click (rect.X + rect.Width/2, rect.Y + rect.Height/2);
end;
procedure Main;
var p, Grid : OleVariant;
begin
// Obtain the application process and the grid object
p := Sys.Process('CellControlsGrid');
Grid := p.WinFormsObject('CellControlsForm').WinFormsObject('gridControl1');
// Click a push button
ClickCell (Grid, 17, 3);
// Simulate actions in the popup window
p.Window('#32770').Window('Button', 'OK').ClickButton();
end;
C++Script, C#Script
function Main ()
{
var p, Grid;
// Obtain the application process and the grid object
p = Sys["Process"]("CellControlsGrid");
Grid = p["WinFormsObject"]("CellControlsForm")["WinFormsObject"]("gridControl1");
// Click a push button
ClickCell (Grid, 17, 3);
// Simulate actions in the popup window
p["Window"]("#32770")["Window"]("Button", "OK")["ClickButton"]();
}
function ClickCell (Grid, RowIndex, ColIndex)
{
// Make cell visible
Grid["ScrollCellInView_3"](RowIndex, ColIndex);
// Get cell coordinates
var rect = Grid["RangeInfoToRectangle"](Grid["GridCellsRange"]["Cell"](RowIndex, ColIndex));
Grid["Click"](rect["X"] + rect["Width"]/2, rect["Y"] + rect["Height"]/2);
}
Working With Drop-Down Editors
Syncfusion GridControl offers various cells that use drop-down editors. For example, a ComboBox cell uses a drop-down list of items, a MonthCalendar cell uses a drop-down window containing a Month Calendar control.
You can display a drop-down editor in the following ways:
- By simulating a mouse click on the cell’s down arrow button.
- By selecting a cell and pressing the F4 key.
- By selecting a cell and calling the
CurrentCell.ShowDropDown
method of the GridControl object.
You can also use the following properties and methods of the GridControl object to check whether the popup window is currently open and to close it:
CurrentCell.IsDropedDown
: Returns True if the drop-down editor is currently opened, and False otherwise.CurrentCell.CloseDropDown(Reason)
: Closes the drop-down editor. The Reason parameter specifies whether to save the changes made; pass the “Done” value in order to save the changes and “Cancel” to discard changes.
To get access to the drop-down window, use the dedicated property of a grid’s CurrentCellRenderer
object. For example, the CurrentCellRenderer.ListBoxPart
can be used to obtain the drop-down combo box or GridListControl, the CurrentCellRenderer.calendar
property returns the drop-down Month Calendar control, and so on.
Note that in this way, you obtain the “native” .NET object corresponding to the editor. To obtain a window
or a Win32 object corresponding to the editor control, you can use the Sys.WindowFromHandle
method and pass the control’s handle (the Handle
property value) as a parameter. You can then use properties, methods and actions of the obtained object to simulate user actions over the editor.
The following example illustrates how you can open drop-down editors (namely, a combo box and Month Calendar editors), access them and simulate user actions over them.
Example
JavaScript, JScript
function Main ()
{
var p, Grid, Calendar;
// Obtain the grid object
p = Sys.Process("CellControlsGrid");
Grid = p.WinFormsObject("CellControlsForm").WinFormsObject("gridControl1");
// Select items in ComboBox cells
ClickCellComboBoxItem (Grid, 23, 1, "One");
ClickCellComboBoxItem (Grid, 23, 3, 3);
// Simulate actions in drop-down MonthCalendar controls
Calendar = OpenMonthCalendar (Grid, 29, 1);
Calendar.SetSelection ("5/1/2007");
Calendar = OpenMonthCalendar (Grid, 29, 3);
Calendar.SetSelection ("7/4/2007");
}
function ClickCellComboBoxItem (Grid, RowIndex, ColIndex, Item)
{
// Check if the specified cell is of the ComboBox type
if (Grid.Item (RowIndex, ColIndex).CellType.OleValue == "ComboBox")
{
// Select the cell and display the drop-down list
ClickCell (Grid, RowIndex, ColIndex);
if (! Grid.CurrentCell.IsDroppedDown)
Grid.Keys ("[F4]");
// Get the onscreen object corresponding to the combo box
var ComboBox = Sys.WindowFromHandle(Grid.CurrentCellRenderer.ListBoxPart.Handle);
// Click the specified combo box item
ComboBox.ClickItem (Item);
}
else
Log.Error ("Cell (" + RowIndex + ", " + ColIndex + ") does not have a combo box.");
}
function OpenMonthCalendar (Grid, RowIndex, ColIndex)
{
// Check if the cell is of the MonthCalendar type
if (Grid.Item (RowIndex, ColIndex).CellType.OleValue == "MonthCalendar")
{
// Select the cell and invoke the drop-down editor
ClickCell (Grid, RowIndex, ColIndex);
if (! Grid.CurrentCell.IsDroppedDown)
Grid.Keys ("[F4]");
// Get an onscreen object corresponding to the MonthCalendar editor
return Sys.WindowFromHandle(Grid.CurrentCellRenderer.calendar.Handle);
}
else
{
Log.Error ("Cell (" + RowIndex + ", " + ColIndex + ") does not have a drop-down MonthCalendar.");
return null;
}
}
function ClickCell (Grid, RowIndex, ColIndex)
{
// Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex);
// Get the cell coordinates
var rect = Grid.RangeInfoToRectangle (Grid.GridCellsRange.Cell(RowIndex, ColIndex));
Grid.Click (rect.X + rect.Width/2, rect.Y + rect.Height/2);
}
Python
def Main ():
# Obtain the grid object
p = Sys.Process("CellControlsGrid")
Grid = p.WinFormsObject("CellControlsForm").WinFormsObject("gridControl1")
# Select items in ComboBox cells
ClickCellComboBoxItem (Grid, 23, 1, "One")
ClickCellComboBoxItem (Grid, 23, 3, 3)
# Simulate actions in drop-down MonthCalendar controls
Calendar = OpenMonthCalendar (Grid, 29, 1)
Calendar.SetSelection ("5/1/2007")
Calendar = OpenMonthCalendar (Grid, 29, 3)
Calendar.SetSelection ("7/4/2007")
def ClickCellComboBoxItem (Grid, RowIndex, ColIndex, Item):
# Check if the specified cell is of the ComboBox type
if (Grid.Item (RowIndex, ColIndex).CellType.OleValue == "ComboBox"):
# Select the cell and display the drop-down list
ClickCell (Grid, RowIndex, ColIndex)
if not Grid.CurrentCell.IsDroppedDown:
Grid.Keys ("[F4]")
# Get the onscreen object corresponding to the combo box
ComboBox = Sys.WindowFromHandle(Grid.CurrentCellRenderer.ListBoxPart.Handle)
# Click the specified combo box item
ComboBox.ClickItem (Item)
else:
Log.Error ("Cell (" + RowIndex + ", " + ColIndex + ") does not have a combo box.")
def OpenMonthCalendar (Grid, RowIndex, ColIndex):
# Check if the cell is of the MonthCalendar type
if (Grid.Item (RowIndex, ColIndex).CellType.OleValue == "MonthCalendar"):
# Select the cell and invoke the drop-down editor
ClickCell (Grid, RowIndex, ColIndex)
if not Grid.CurrentCell.IsDroppedDown:
Grid.Keys ("[F4]")
# Get an onscreen object corresponding to the MonthCalendar editor
return Sys.WindowFromHandle(Grid.CurrentCellRenderer.calendar.Handle)
else:
Log.Error ("Cell (" + RowIndex + ", " + ColIndex + ") does not have a drop-down MonthCalendar.")
return None
def ClickCell (Grid, RowIndex, ColIndex):
# Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex)
# Get the cell coordinates
rect = Grid.RangeInfoToRectangle (Grid.GridCellsRange.Cell(RowIndex, ColIndex))
Grid.Click (rect.X + rect.Width/2, rect.Y + rect.Height/2)
VBScript
Sub Main
Dim p, Grid, Calendar
' Obtain the grid object
Set p = Sys.Process("CellControlsGrid")
Set Grid = p.WinFormsObject("CellControlsForm").WinFormsObject("gridControl1")
' Select items in ComboBox cells
Call ClickCellComboBoxItem_2 (Grid, 23, 1, "One")
Call ClickCellComboBoxItem_2 (Grid, 23, 3, 3)
' Simulate actions in drop-down MonthCalendar controls
Set Calendar = OpenMonthCalendar (Grid, 29, 1)
Call Calendar.SetSelection ("5/1/2007")
Set Calendar = OpenMonthCalendar (Grid, 29, 3)
Call Calendar.SetSelection ("7/4/2007")
End Sub
Sub ClickCellComboBoxItem (Grid, RowIndex, ColIndex, Item)
Dim ComboBox
' Check if the specified cell is of the ComboBox type
If Grid.Item(RowIndex, ColIndex).CellType.OleValue = "ComboBox" Then
' Select the cell and display the drop-down list
Call ClickCell (Grid, RowIndex, ColIndex)
If Not Grid.CurrentCell.IsDroppedDown Then
Grid.Keys ("[F4]")
End If
' Get the onscreen object corresponding to the combo box
Set ComboBox = Sys.WindowFromHandle(Grid.CurrentCellRenderer.ListBoxPart.Handle)
' Click the specified combo box item
Call ComboBox.ClickItem (Item)
Else
Log.Error ("Cell (" & RowIndex & ", " & ColIndex & ") does not have a combo box.")
End If
End Sub
Function OpenMonthCalendar (Grid, RowIndex, ColIndex)
' Check if the cell is of the MonthCalendar type
If Grid.Item(RowIndex, ColIndex).CellType.OleValue = "MonthCalendar" Then
' Select the cell and invoke the drop-down editor
Call ClickCell (Grid, RowIndex, ColIndex)
If Not Grid.CurrentCell.IsDroppedDown Then
Grid.Keys ("[F4]")
End If
' Get an onscreen object corresponding to the MonthCalendar editor
Set OpenMonthCalendar = Sys.WindowFromHandle(Grid.CurrentCellRenderer.calendar.Handle)
Else
Call Log.Error ("Cell (" & RowIndex & ", " & ColIndex & ") does not have a drop-down MonthCalendar.")
Set OpenMonthCalendar = Nothing
End If
End Function
Sub ClickCell (Grid, RowIndex, ColIndex)
Dim rect
' Make cell visible
Call Grid.ScrollCellInView_3 (RowIndex, ColIndex)
' Get the cell coordinates
Set rect = Grid.RangeInfoToRectangle (Grid.GridCellsRange.Cell(RowIndex, ColIndex))
Call Grid.Click (rect.X + rect.Width/2, rect.Y + rect.Height/2)
End Sub
DelphiScript
procedure ClickCellComboBoxItem (Grid, RowIndex, ColIndex, Item); forward;
function OpenMonthCalendar (Grid, RowIndex, ColIndex); forward;
procedure ClickCell (Grid, RowIndex, ColIndex); forward;
procedure Main;
var p, Grid, Calendar : OleVariant;
begin
// Obtain the grid object
p := Sys.Process('CellControlsGrid');
Grid := p.WinFormsObject('CellControlsForm').WinFormsObject('gridControl1');
// Select items in ComboBox cells
ClickCellComboBoxItem (Grid, 23, 1, 'One');
ClickCellComboBoxItem (Grid, 23, 3, 3);
// Simulate actions in drop-down MonthCalendar controls
Calendar := OpenMonthCalendar (Grid, 29, 1);
Calendar.SetSelection ('5/1/2007');
Calendar := OpenMonthCalendar (Grid, 29, 3);
Calendar.SetSelection ('7/4/2007');
end;
procedure ClickCellComboBoxItem (Grid, RowIndex, ColIndex, Item);
var ComboBox : OleVariant;
begin
// Check if the specified cell is of the ComboBox type
if Grid.Item[RowIndex, ColIndex].CellType.OleValue = 'ComboBox' then
begin
// Select the cell and display the drop-down list
ClickCell (Grid, RowIndex, ColIndex);
if not Grid.CurrentCell.IsDroppedDown then
Grid.Keys ('[F4]');
// Get the onscreen object corresponding to the combo box
ComboBox := Sys.WindowFromHandle(Grid.CurrentCellRenderer.ListBoxPart.Handle);
// Click the specified combo box item
ComboBox.ClickItem (Item);
end
else
Log.Error ('Cell (' + aqConvert.VarToStr(RowIndex) + ', ' + aqConvert.VarToStr(ColIndex) + ') does not have a combo box.');
end;
function OpenMonthCalendar (Grid, RowIndex, ColIndex);
begin
// Check if the cell is of the MonthCalendar type
if Grid.Item[RowIndex, ColIndex].CellType.OleValue = 'MonthCalendar' then
begin
// Select the cell and invoke the drop-down editor
ClickCell (Grid, RowIndex, ColIndex);
if not Grid.CurrentCell.IsDroppedDown then
Grid.Keys ('[F4]');
// Get an onscreen object corresponding to the MonthCalendar editor
Result := Sys.WindowFromHandle(Grid.CurrentCellRenderer.calendar.Handle);
end
else
begin
Log.Error ('Cell (' + aqConvert.VarToStr(RowIndex) + ', ' + aqConvert.VarToStr(ColIndex) + ') does not have a drop-down MonthCalendar.');
Result := nil;
end
end;
procedure ClickCell (Grid, RowIndex, ColIndex);
var rect : OleVariant;
begin
// Make cell visible
Grid.ScrollCellInView_3 (RowIndex, ColIndex);
// Get the cell coordinates
rect := Grid.RangeInfoToRectangle (Grid.GridCellsRange.Cell(RowIndex, ColIndex));
Grid.Click (rect.X + rect.Width/2, rect.Y + rect.Height/2);
end;
C++Script, C#Script
function Main ()
{
var p, Grid, Calendar;
// Obtain the grid object
p = Sys["Process"]("CellControlsGrid");
Grid = p["WinFormsObject"]("CellControlsForm")["WinFormsObject"]("gridControl1");
// Select items in ComboBox cells
ClickCellComboBoxItem (Grid, 23, 1, "One");
ClickCellComboBoxItem (Grid, 23, 3, 3);
// Simulate actions in drop-down MonthCalendar controls
Calendar = OpenMonthCalendar (Grid, 29, 1);
Calendar["SetSelection"]("5/1/2007");
Calendar = OpenMonthCalendar (Grid, 29, 3);
Calendar["SetSelection"]("7/4/2007");
}
function ClickCellComboBoxItem (Grid, RowIndex, ColIndex, Item)
{
// Check if the specified cell is of the ComboBox type
if (Grid["Item"](RowIndex, ColIndex)["CellType"]["OleValue"] == "ComboBox")
{
// Select the cell and display the drop-down list
ClickCell (Grid, RowIndex, ColIndex);
if (! Grid["CurrentCell"]["IsDroppedDown"])
Grid["Keys"]("[F4]");
// Get the onscreen object corresponding to the combo box
var ComboBox = Sys["WindowFromHandle"](Grid["CurrentCellRenderer"]["ListBoxPart"]["Handle"]);
// Click the specified combo box item
ComboBox["ClickItem"](Item);
}
else
Log["Error"]("Cell (" + RowIndex + ", " + ColIndex + ") does not have a combo box.");
}
function OpenMonthCalendar (Grid, RowIndex, ColIndex)
{
// Check if the cell is of the MonthCalendar type
if (Grid["Item"](RowIndex, ColIndex)["CellType"]["OleValue"] == "MonthCalendar")
{
// Select the cell and invoke the drop-down editor
ClickCell (Grid, RowIndex, ColIndex);
if (! Grid["CurrentCell"]["IsDroppedDown"])
Grid["Keys"]("[F4]");
// Get an onscreen object corresponding to the MonthCalendar editor
return Sys["WindowFromHandle"](Grid["CurrentCellRenderer"]["calendar"]["Handle"]);
}
else
{
Log["Error"]("Cell (" + RowIndex + ", " + ColIndex + ") does not have a drop-down MonthCalendar.");
return null;
}
}
function ClickCell (Grid, RowIndex, ColIndex)
{
// Make cell visible
Grid["ScrollCellInView_3"](RowIndex, ColIndex);
// Get the cell coordinates
var rect = Grid["RangeInfoToRectangle"](Grid["GridCellsRange"]["Cell"](RowIndex, ColIndex));
Grid["Click"](rect["X"] + rect["Width"]/2, rect["Y"] + rect["Height"]/2);
}
Note that most drop-down editors in GridControl support the automatic completion feature. It means that you can select an item or value from the editor by typing the item caption into the cell. For more information about simulating input strings into GridControl cells, see Obtaining and Setting Cell Values in Syncfusion GridControl.
See Also
Working With Syncfusion GridControl
Activating and Closing In-place Editors in Syncfusion GridControl
Obtaining and Setting Cell Values in Syncfusion GridControl
Selecting Cells in Syncfusion GridControl