Forum Discussion
Bharadwaj
Contributor
Hi ,
I imagine you actually know the row which you obviously want to edit or delete. So in that case your test case has access to the data of that row. Taking that as granted the following solution actually works for any table control(edit,delete a table row etc)
//in your case ColumnName : Employee //grid is the object reference of the table you are dealing with function GetTableColumnIndex(Grid, ColumnName, IsLogOnError: OleVariant = true): integer; var ri, i: integer; str1,str2:string; begin result := -1; str2 := TidyStringL(ColumnName); //Log.Message(str2 + ' : ' + VarToStr(Length(str2))); for ri := 0 to Grid.RowCount - 1 do begin for i := 0 to Grid.ColumnCount[i] - 1 do begin str1 := aqString.Trim(aqString.ToLower(VarToStr(Grid.Cell(ri, i).contentText))); if aqString.Compare(str1,str2,false) = 0 then begin result := i; exit; end; end; end; if IsLogOnError then Log.Error('''' + VarToStr(ColumnName) + ''' column not found on grid ' + VarToStr(Grid.FullName), nil, nil, nil, Grid.Picture); end; function GetTableRowNo(Grid, KeyFields, KeyValues): integer; var i, j, colIndex: integer; match: boolean; begin result := -1; aqString.ListSeparator := ','; for i := 0 to Grid.RowCount - 1 do //each row begin match := true; for j := 0 to aqString.GetListLength(KeyFields) - 1 do //each key field begin colIndex := GetTableColumnIndex(Grid, aqString.GetListItem(KeyFields, j)); if colIndex < 0 then exit; //'No data to display' cell if Grid.ColumnCount[i] < colIndex then //column count of the row < colIndex continue; //CompareStringValues is just a comparision function which compares 2 //string and returns true if same else returns false match := match and (CompareStringValues(aqString.Trim(aqString.GetListItem(KeyValues, j)), aqString.Trim(Grid.Cell(i, colIndex).contentText))); end; if match then begin result := i; exit; end; end; Log.Error('Row with enclosed column values not found on grid ' + VarToStr(Grid.FullName), 'Column Names: ' + VarToStr(KeyFields) + #13#10 + 'Column Values: ' + VarToStr(KeyValues), nil, nil, Grid.Picture); end; function GetTableRowColumnIndex(Grid, KeyFields, KeyValues, FieldName; var RowNo, ColNo): boolean; var dataGridObj:OleVariant; begin result := false; RowNo := GetTableRowNo(Grid, KeyFields, KeyValues); if RowNo < 0 then exit; { check to see if the Grid is not a split grid(header and data in different grids) if it is then get the data grid reference o } if not Grid.exists then exit; ColNo := GetTableColumnIndex(Grid, FieldName); if ColNo < 0 then exit; result := true; end; { locate grid cell and click on it ClickObjectType - nil: click center of the ClickField cell - an ObjectType string: will look for an object of ObjectType = ClickObjectType under ClickField cell then click on it } function ClickTableCellControl(Grid, KeyFields, KeyValues, ClickField, ClickObjectType: OleVariant = nil): boolean; var rowNo, colIndex: integer; o: OleVariant; begin result := false; if not GetTableRowColumnIndex(Grid, KeyFields, KeyValues, ClickField, rowNo, colIndex) then exit; { Get the Datagrid Reference } if not Grid.exists then exit; if IsNullNil(ClickObjectType) then Grid.Cell(rowNo, colIndex).Click else begin //GetButtonObjectReference is a custome method which you should develop where the first parameter //Grid.Cell(rowNo, colIndex) is the parent where your edit and delete buttons reside // the fourth parameter with value 'ObjectType' is name of the property of the button in this case 'ObjectType' and value //(in your case you an find the value of the property "ObjectType" for button you want to click uisng object browser //this is how you get the reference of the button which you want to click in the grid o := GetButtonObjectReference(Grid.Cell(rowNo, colIndex), nil, nil, 'ObjectType', ClickObjectType); if not o.exists then exit; o.Click; end; result := true; end;
Implementation
ClickTableCellControl(tblObject,nil,nil,'Employee','LastName572,FirstName572....','Actions','Image')
Related Content
- 9 months agoLuukdb
- 2 years agoloricotton
- 2 years agorkadali