I personally prefer not to use the actual grid rows (SelectedRows collection) as the payload of the D&D operation. This would create a tight dependency between the implementation of the sender and recipient.
In the SmartFunctionMaintenanceForm we're using a .NET generic dictionary with a map of field names and field values.
You can use any type that inherits from System.Object as the payload for a drag and drop operation.
METHOD PRIVATE VOID smartDataBrowser1_MouseDown (sender AS System.Object,
e AS System.Windows.Forms.MouseEventArgs):
DEFINE VARIABLE oUIElement AS Infragistics.Win.UIElement NO-UNDO .
DEFINE VARIABLE oDictionary AS "Dictionary<String,String>":U NO-UNDO .
/* Find out if the RowSelect is being clicked, don't do D&D when clicking a cell */
oUIElement = smartDataBrowser1:DisplayLayout:UIElement:ElementFromPoint (e:Location) .
IF TYPE-OF (oUIElement, Infragistics.Win.UltraWinGrid.RowSelectorUIElement)
AND smartDataBrowser1:Selected:Rows:Count > 0 THEN DO:
oDictionary = NEW "Dictionary<String,String>":U ().
oDictionary:Add ("eSmartFunction.FunctionGuid":U, FunctionAdapter:GetFieldValues("FunctionGuid":U)).
oDictionary:Add ("eSmartFunction.FunctionName":U, FunctionAdapter:GetFieldValues("FunctionName":U)).
oDictionary:Add ("eSmartFunction.FunctionSmallImage":U, FunctionAdapter:GetFieldValues("FunctionSmallImage":U)).
oDictionary:Add ("eSmartFunction.FunctionLargeImage":U, FunctionAdapter:GetFieldValues("FunctionLargeImage":U)).
smartDataBrowser1:DoDragDrop (oDictionary, System.Windows.Forms.DragDropEffects:Link).
END.
CATCH err AS Progress.Lang.Error:
ErrorHelper:ShowErrorMessage (err) .
END CATCH.
END METHOD .