RE:De datagridview a report
primero podrias mandar tu consulta a un archivo XML y establecer ese archivo como el source de tu reporte crystal
Dim Datos As New DataSet
Dim MiConsulta As String = "SELECT * FROM MITABLA"
Dim EjecutaConsulta As New MySqlDataAdapter(MiConsulta, MyConectionString)
EjecutaConsulta.Fill(Datos)
Datos.WriteXml(".\MiArchivo.xml", XmlWriteMode.WriteSchema)
Como podras ver, aqui trabajo con MySql, pero igual sirve en todo, aqui lo importante es enviar tus datos a un archivo XML.
Si necesitas mas ayuda hazmelo saber,, yo busque muchisimo antes de encontrar eso y me ha servido.