I have an application that fills an ASP.NET 2.0 gridview with data fed by CreateCriteria.List, session.Find or IQuery.List. I must admit that I've not yet tried it with results from different databasetables and joins.
You can easily bind arraylists to a gridview. All you have to do is define the columns and set their datafield to the property name of your transfer objects.
For example:
Code:
<asp:GridView ID="DriverGrid" runat="server" AutoGenerateColumns="False" DataKeyNames="DriverID">
<Columns>
<asp:BoundField DataField="LicenseNumber" SortExpression="LicenseNumber" />
</Columns>
</asp:GridView>
(This is of course a simplified example)
If you use WinForms, it's also very simple. Use a DataGridView to display your results. Also set the AutoGenerateColumns to false and if you use the "edit columns" window, you can set the DataPropertyName to the name of the property you need in that column. You just need to set the DataSource property to the ArrayList returned by the query...