Hola,
No entiendo bien porqué evitas el DBGrid. ¿Quieres poder cerrar la conexión y seguir mostrando los datos? En tal caso puedes valerte de un ClientDataSet conectado al DataSet original via un Provider:
Código:
DataSet<--DataSetProvider<--ClientDataSet<--DataSource<--DBGrid
Cuando abras el ClientDataSet, éste obtendrá los datos através del provider y los mostrará en el dbgrid. Si en ese momento cierras el DataSet original, los datos siguen mostrándose ya que el ClientDataSet los tiene en memoria.
De esta forma logras mantener cerrada la conexión y aún así disponer de la potencia y ventajas de un dbgrid.
// Saludos