Iterating through grid rows means accessing rows is a series, one by one. You may need to iterate through DataGridView rows if you need to locate a particular row, or perform the same set of operations on each row.
To determine the number of grid rows, you can use the wRowCount
property of the MicrosoftDataGridView
object, or the grid’s “native” RowCount
or Rows.Count
property. Once you have determined the number of data rows in the grid, you can iterate through them in a loop. Since the numeration of grid rows is zero-based, index of the first grid row is 0, and index of the last row equals to the number of rows minus 1. On each loop iteration, you can perform the needed actions with the current row. For example, you can modify values in its cells or save them to a file. For more information on how to obtain or modify grid cell values, see Obtaining and Setting Cell Values in Microsoft DataGridView.
TestComplete extends the DataGridView functionality with properties and methods of the MicrosoftDataGridView object only if the Microsoft Control Support plugin is installed and enabled. The internal properties and methods of the DataGridView control are accessible to TestComplete if the .NET Application Support plugin is installed and enabled. |
The following example demonstrated how to process DataGridView rows in a loop. It iterates through the grid rows, saves the data to an XML file and adds a link to this file in the test log.
Example
JavaScript
function Main ()
{
var p, Grid, FileName;
// Obtain the grid object
p = Sys.Process ("DataGridViewSample");
Grid = p.WinFormsObject("Form1").WinFormsObject("dataGridView1");
// Export the grid data to a file
FileName = "C:\\GridData.xml";
ExportToXml (Grid, FileName);
Log.File (FileName, "Exported grid data.");
}
// Saves the grid data to the XML file
function ExportToXml (Grid, FileName)
{
var FSO, DataFile, Overwrite, Unicode, CellValue, CellText;
Indicator.PushText("Exporting grid data...");
// Create a text file and open it for writing
Overwrite = true;
Unicode = true;
FSO = getActiveXObject("Scripting.FileSystemObject");
DataFile = FSO.CreateTextFile (FileName, Overwrite, Unicode);
// Write the opening root tag
DataFile.WriteLine ("<?xml version=\"1.0\"?>");
DataFile.WriteLine ("<grid>");
// Export column captions
DataFile.WriteLine (" <columns>");
for (let Col = 0; Col < Grid.wColumnCount; Col++)
DataFile.WriteLine(" <column>" + GetValidXmlString(Grid.wColumn(Col)) + "</column>");
DataFile.WriteLine (" </columns>");
// Export grid cells data
DataFile.WriteLine (" <rows>");
for (let Row = 0; Row < Grid.wRowCount; Row++)
{
DataFile.WriteLine(" <row>");
for (let Col = 0; Col < Grid.wColumnCount; Col++)
{
// Get the text representation of the cell value
CellValue = Grid.wValue (Row, Col);
if (strictEqual(CellValue, null))
CellText = "null"
else if (equal(aqObject.GetVarType (CellValue), varDispatch))
CellText = CellValue.ToString().OleValue
else
CellText = aqConvert.VarToStr(CellValue);
DataFile.WriteLine(" <cell>" + GetValidXmlString (CellText) + "</cell>");
}
DataFile.WriteLine(" </row>");
}
DataFile.WriteLine(" </rows>");
// Write the closing root tag
DataFile.WriteLine("</grid>");
// Close the file
DataFile.Close();
Indicator.PopText();
}
// Replaces special characters in the specified string
function GetValidXmlString (str)
{
let s = aqString.Replace (str, "&", "&", true);
s = aqString.Replace (s, "<", "<", true);
s = aqString.Replace (s, ">", ">", true);
s = aqString.Replace (s, "\"", """, true);
s = aqString.Replace (s, "'", "'", true);
return s;
}
JScript
function Main ()
{
var p, Grid, FileName;
// Obtain the grid object
p = Sys.Process ("DataGridViewSample");
Grid = p.WinFormsObject("Form1").WinFormsObject("dataGridView1");
// Export the grid data to a file
FileName = "C:\\GridData.xml";
ExportToXml (Grid, FileName);
Log.File (FileName, "Exported grid data.");
}
// Saves the grid data to the XML file
function ExportToXml (Grid, FileName)
{
var FSO, DataFile, Overwrite, Unicode, Row, Col, CellValue, CellText;
Indicator.PushText("Exporting grid data...");
// Create a text file and open it for writing
Overwrite = true;
Unicode = true;
FSO = new ActiveXObject ("Scripting.FileSystemObject");
DataFile = FSO.CreateTextFile (FileName, Overwrite, Unicode);
// Write the opening root tag
DataFile.WriteLine ("<?xml version=\"1.0\"?>");
DataFile.WriteLine ("<grid>");
// Export column captions
DataFile.WriteLine (" <columns>");
for (Col = 0; Col < Grid.wColumnCount; Col++)
DataFile.WriteLine(" <column>" + GetValidXmlString(Grid.wColumn(Col)) + "</column>");
DataFile.WriteLine (" </columns>");
// Export grid cells data
DataFile.WriteLine (" <rows>");
for (Row = 0; Row < Grid.wRowCount; Row++)
{
DataFile.WriteLine(" <row>");
for (Col = 0; Col < Grid.wColumnCount; Col++)
{
// Get the text representation of the cell value
CellValue = Grid.wValue (Row, Col);
if (CellValue == null)
CellText = "null"
else if (aqObject.GetVarType (CellValue) == varDispatch)
CellText = CellValue.ToString().OleValue
else
CellText = aqConvert.VarToStr(CellValue);
DataFile.WriteLine(" <cell>" + GetValidXmlString (CellText) + "</cell>");
}
DataFile.WriteLine(" </row>");
}
DataFile.WriteLine(" </rows>");
// Write the closing root tag
DataFile.WriteLine("</grid>");
// Close the file
DataFile.Close();
Indicator.PopText();
}
// Replaces special characters in the specified string
function GetValidXmlString (str)
{
var s = aqString.Replace (str, "&", "&", true);
s = aqString.Replace (s, "<", "<", true);
s = aqString.Replace (s, ">", ">", true);
s = aqString.Replace (s, "\"", """, true);
s = aqString.Replace (s, "'", "'", true);
return s;
}
Python
def Main ():
# Obtain the grid object
p = Sys.Process ("DataGridViewSample")
Grid = p.WinFormsObject("Form1").WinFormsObject("dataGridView1")
# Export the grid data to a file
FileName = "C:\\GridData.xml"
ExportToXml (Grid, FileName)
Log.File (FileName, "Exported grid data.")
# Saves the grid data to the XML file
def ExportToXml (Grid, FileName):
Indicator.PushText("Exporting grid data...")
# Create a text file and open it for writing
Overwrite = True
Unicode = True
FSO = Sys.OleObject ['Scripting.FileSystemObject']
DataFile = FSO.CreateTextFile (FileName, Overwrite, Unicode)
# Write the opening root tag
DataFile.WriteLine ("<?xml version=\"1.0\"?>")
DataFile.WriteLine ("<grid>")
# Export column captions
DataFile.WriteLine (" <columns>")
for Col in range(0, Grid.wColumnCount-1):
DataFile.WriteLine(" <column>" + GetValidXmlString(Grid.wColumn(Col)) + "</column>")
DataFile.WriteLine (" </columns>")
# Export grid cells data
DataFile.WriteLine (" <rows>")
for Row in range(0, Grid.wRowCount-1):
DataFile.WriteLine(" <row>")
for Col in range(0, Grid.wColumnCount-1):
# Get the text representation of the cell value
CellValue = Grid.wValue (Row, Col)
if (CellValue == None):
CellText = "None"
elif (aqObject.GetVarType (CellValue) == varDispatch):
CellText = CellValue.ToString().OleValue
else:
CellText = aqConvert.VarToStr(CellValue)
DataFile.WriteLine(" <cell>" + GetValidXmlString (CellText) + "</cell>")
DataFile.WriteLine(" </row>")
DataFile.WriteLine(" </rows>")
# Write the closing root tag
DataFile.WriteLine("</grid>")
# Close the file
DataFile.Close()
Indicator.PopText()
# Replaces special characters in the specified string
def GetValidXmlString (str):
s = aqString.Replace (str, "&", "&", True)
s = aqString.Replace (s, "<", "<", True)
s = aqString.Replace (s, ">", ">", True)
s = aqString.Replace (s, "\"", """, True)
s = aqString.Replace (s, "'", "'", True)
return s
VBScript
Sub Main
Dim p, Grid, FileName
' Obtain the grid object
Set p = Sys.Process ("DataGridViewSample")
Set Grid = p.WinFormsObject("Form1").WinFormsObject("dataGridView1")
' Export the grid data to a file
FileName = "C:\\GridData.xml"
Call ExportToXml (Grid, FileName)
Call Log.File (FileName, "Exported grid data.")
End Sub
' Saves the grid data to the XML file
Sub ExportToXml (Grid, FileName)
Dim FSO, DataFile, Overwrite, Unicode, Row, Col, CellText
Indicator.PushText("Exporting grid data...")
' Create a text file and open it for writing
Overwrite = True
Unicode = True
Set FSO = CreateObject ("Scripting.FileSystemObject")
Set DataFile = FSO.CreateTextFile (FileName, Overwrite, Unicode)
' Write the opening root tag
Call DataFile.WriteLine ("<?xml version=""1.0""?>")
DataFile.WriteLine ("<grid>")
' Export column captions
DataFile.WriteLine (" <columns>")
For Col = 0 To Grid.wColumnCount-1
DataFile.WriteLine (" <column>" & GetValidXmlString(Grid.wColumn(Col)) & "</column>")
Next
DataFile.WriteLine (" </columns>")
' Export grid cells data
DataFile.WriteLine (" <rows>")
For Row = 0 To Grid.wRowCount-1
DataFile.WriteLine(" <row>")
For Col = 0 To Grid.wColumnCount-1
' Get the text representation of the cell value
If aqObject.GetVarType (Grid.wValue (Row, Col)) = varDispatch Then
If Grid.wValue (Row, Col) Is Nothing Then
CellText = "Nothing"
Else
CellText = Grid.wValue (Row, Col).ToString().OleValue
End If
Else
CellText = aqConvert.VarToStr(CellValue)
End If
DataFile.WriteLine(" <cell>" & GetValidXmlString (CellText) & "</cell>")
Next
DataFile.WriteLine(" </row>")
Next
DataFile.WriteLine(" </rows>")
' Write the closing root tag
DataFile.WriteLine("</grid>")
' Close the file
DataFile.Close()
Indicator.PopText()
End Sub
' Replaces special characters in the specified string
Function GetValidXmlString (str)
Dim s
s = aqString.Replace (str, "&", "&", True)
s = aqString.Replace (s, "<", "<", True)
s = aqString.Replace (s, ">", ">", True)
s = aqString.Replace (s, """", """, True)
s = aqString.Replace (s, "'", "'", True)
GetValidXmlString = s
End Function
DelphiScript
procedure ExportToXml (Grid, FileName); forward;
function GetValidXmlString (str); forward;
procedure Main;
var p, Grid, FileName : OleVariant;
begin
// Obtain the grid object
p := Sys.Process ('DataGridViewSample');
Grid := p.WinFormsObject('Form1').WinFormsObject('dataGridView1');
// Export the grid data to a file
FileName := 'C:\\GridData.xml';
ExportToXml (Grid, FileName);
Log.File (FileName, 'Exported grid data.');
end;
// Saves the grid data to the XML file
procedure ExportToXml (Grid, FileName);
var FSO, DataFile, Overwrite, Unicode, Row, Col, CellValue, CellText : OleVariant;
begin
Indicator.PushText('Exporting grid data...');
// Create a text file and open it for writing
Overwrite := true;
Unicode := true;
FSO := Sys.OleObject ('Scripting.FileSystemObject');
DataFile := FSO.CreateTextFile (FileName, Overwrite, Unicode);
// Write the opening root tag
DataFile.WriteLine ('<?xml version:="1.0"?>');
DataFile.WriteLine ('<grid>');
// Export column captions
DataFile.WriteLine (' <columns>');
for Col := 0 to Grid.wColumnCount-1 do
DataFile.WriteLine(' <column>' + GetValidXmlString(Grid.wColumn(Col)) + '</column>');
DataFile.WriteLine (' </columns>');
// Export grid cells data
DataFile.WriteLine (' <rows>');
for Row := 0 to Grid.wRowCount-1 do
begin
DataFile.WriteLine(' <row>');
for Col := 0 to Grid.wColumnCount-1 do
begin
// Get the text representation of the cell value
CellValue := Grid.wValue (Row, Col);
if CellValue = nil then
CellText := 'nil'
else if aqObject.GetVarType (CellValue) = varDispatch then
CellText := CellValue.ToString.OleValue
else
CellText := aqConvert.VarToStr(CellValue);
DataFile.WriteLine(' <cell>' + GetValidXmlString (CellText) + '</cell>')
end;
DataFile.WriteLine(' </row>')
end;
DataFile.WriteLine(' </rows>');
// Write the closing root tag
DataFile.WriteLine('</grid>');
// Close the file
DataFile.Close;
Indicator.PopText;
end;
// Replaces special characters in the specified string
function GetValidXmlString (str);
var s : OleVariant;
begin
s := aqString.Replace (str, '&', '&', true);
s := aqString.Replace (s, '<', '<', true);
s := aqString.Replace (s, '>', '>', true);
s := aqString.Replace (s, '"', '"', true);
s := aqString.Replace (s, '''', ''', true);
Result := s;
end;
C++Script, C#Script
function Main ()
{
var p, Grid, FileName;
// Obtain the grid object
p = Sys["Process"]("DataGridViewSample");
Grid = p["WinFormsObject"]("Form1")["WinFormsObject"]("dataGridView1");
// Export the grid data to a file
FileName = "C:\\GridData.xml";
ExportToXml (Grid, FileName);
Log["File"](FileName, "Exported grid data.");
}
// Saves the grid data to the XML file
function ExportToXml (Grid, FileName)
{
var FSO, DataFile, Overwrite, Unicode, Row, Col, CellValue, CellText;
Indicator["PushText"]("Exporting grid data...");
// Create a text file and open it for writing
Overwrite = true;
Unicode = true;
FSO = new ActiveXObject ("Scripting.FileSystemObject");
DataFile = FSO["CreateTextFile"](FileName, Overwrite, Unicode);
// Write the opening root tag
DataFile["WriteLine"]("<?xml version=\"1.0\"?>");
DataFile["WriteLine"]("<grid>");
// Export column captions
DataFile["WriteLine"](" <columns>");
for (Col = 0; Col < Grid["wColumnCount"]; Col++)
DataFile["WriteLine"](" <column>" + GetValidXmlString(Grid["wColumn"](Col)) + "</column>");
DataFile["WriteLine"](" </columns>");
// Export grid cells data
DataFile["WriteLine"](" <rows>");
for (Row = 0; Row < Grid["wRowCount"]; Row++)
{
DataFile["WriteLine"](" <row>");
for (Col = 0; Col < Grid["wColumnCount"]; Col++)
{
// Get the text representation of the cell value
CellValue = Grid["wValue"](Row, Col);
if (CellValue == null)
CellText = "null"
else if (aqObject["GetVarType"] (CellValue) == varDispatch)
CellText = CellValue["ToString"]()["OleValue"]
else
CellText = aqConvert["VarToStr"](CellValue);
DataFile["WriteLine"](" <cell>" + GetValidXmlString (CellText) + "</cell>");
}
DataFile["WriteLine"](" </row>");
}
DataFile["WriteLine"](" </rows>");
// Write the closing root tag
DataFile["WriteLine"]("</grid>");
// Close the file
DataFile["Close"]();
Indicator["PopText"]();
}
// Replaces special characters in the specified string
function GetValidXmlString (str)
{
var s = aqString["Replace"](str, "&", "&", true);
s = aqString["Replace"](s, "<", "<", true);
s = aqString["Replace"](s, ">", ">", true);
s = aqString["Replace"](s, "\"", """, true);
s = aqString["Replace"](s, "'", "'", true);
return s;
}
See Also
Working With Microsoft DataGridView
Obtaining and Setting Cell Values in Microsoft DataGridView
Searching for Records in Microsoft DataGridView
Selecting Multiple Records in Microsoft DataGridView
wRowCount Property (Grid Controls)