En mi caso yo uso ADO para manejar mis bases de datos.. cuando quiero mostrar una tabla en un datagrid primero abro un RecordSet con los campos y registros que quiera mostrar en el datagrid, una vez cargada la consulta en el RecordSet es entonces cuando despliego dicha consulta en un DataGrid.
Set DataGrid1.DataSource = Rs
Para recorrer cada fila del DataGrid (que vendría siendo un registro de la tabla) lo hago por medio del RecordSet, por ejemplo si pongo
Rs.MoveLast
El puntero del datagrid se posiciona hasta al último
Si pongo
Rs.Find "campo=1"
El puntero del datagrid se posiciona en el registro con esas característica, siempre y cuando y lo encuentre (no incluyo las validaciones del caso en que no lo encuentre).
Para hacer referencia a una celda del datagrid uso
DataGrid1.Columns(puntero_columna).Text
donde puntero_columna se refiere a los campos que hice en la consulta del RecordSet, iniciando desde cero, claro, esto lo uso porque ya se qué campos son los que muestro en el datagrid
Para saber el total de columnas (campos) que se muestran en el datagrid creo que es (no lo he probado)
DataGrid1.Columns.Count
Otra forma de hacer lo que tu pretendes la desconozco... suerte