You will have to build a IList object to hold your data through some kind of custom collection. The data does not have to come from a database in order for a GridGroupingControl to work with it, but it must be an an object that implements IList. If the items in the collection are not strongly typed, then the list should also implement ITypeList. Once you have this IList, ITypedList object, you would set it as the datasource of the groupingcontrol or (use gridGroupingControl1.Engine.SetSourceList to set it).
If you really have arbitray untyped objects you are working with, here is a of how you can dynamically add properties at runtime to your IList by implementing ITypedList.
This little sample dynamically adds properties at runtime to an arraylist dataobject. It does so by passing the list of types and a list of names for the properties it wants the objects in the arraylist to have.