It doesn't matter how you get your data. You can still bind it to the grid. If you have a DataTable, whether it's in a DataSet or not, then you can bind that DataTable to the grid. It doesn't matter whether you create and populate the DataTable yourself or you get it from elsewhere. A DataTable is a DataTable.

You don't need a DataTable either. Any list of data can be bound to the grid. Even if you create and populate the DataTable yourself you might still choose to transfer the data into a collection of business objects. Alternatively you might be receiving a collection of business objects from elsewhere. No sweat. Bind away.

Data-binding has nothing whatsoever to do with databases or data access. Data-binding is a very flexible mechanism that allows you to bind any IList or IListSource object to a control. Often the data in that object will have come from a database but there is no requirement for it to be so. Also, the DataTable class implements the IListSource interface, and therefore supports data-binding, but it is far from the only example. Almost every collection class in the Framework implements IList, so almost every collection class can be data-bound. The Array class also implements IList, so one-dimensional arrays can also be data-bound.