Hi,
These are not easy questions to answer. First, you cannot add data to the grid manually. The grid requires a Data Source of some kind. There are lots of data sources you can use, though. You can bind the grid to any object which implements IList or IBindingList. So you could use a DataSet, a DataTable, an UltraDataSource, a generic List or BindingList, or many many other object.
If you want to load data on-demand, then I recommend using the UltraDataSource, There's a sample included with the NetAdvantage SDK called the "Virtual Mode Sample" which demonstrates a grid with 1 million rows that are loaded only as needed.
The grid cannot be bound to a non-homogenous data source, either, though. So if your data structure is going to change on a row-by-row basis, then you probably can't use the grid.
You might want to look into using UltraWinTree. The tree lacks some features of the grid like filtering and summaries, but you would not be able to use those features in the grid anyway without loading all of the data. And the tree supports manually adding nodes and non-homogenous data structures. There's a sample included with the SDK of loading a tree with data on-demand as nodes are expanded. So it sounds like the WinTree will do exactly what you need.