Its better to use DataAdapter to fill a datagridview from database .
Data reader used mostly where we have to fetch and process data row one by one.
i.e.
Dim ConnStr As String= "your connection string"
Dim SConn As System.Data.SqlClient.SqlConnection
Dim SqlStat As String="select * from tableName"
SConn = New System.Data.SqlClient.SqlConnection(ConnStr)
SConn.Open()
Using DataAdapter is so simple.
Dim ds As DataSet = New DataSet()
Dim da As System.Data.SqlClient.SqlDataAdapter
da = New System.Data.SqlClient.SqlDataAdapter(SqlStat, SConn)
da.Fill(ds, "myTable")
DatagridView1.DataSource=ds.tables("myTable")
If you must have to use datareader then
using datareader :
Dim SComm As System.Data.SqlClient.SqlCommand
SComm = New System.Data.SqlClient.SqlCommand(SqlStat, SConn)
Dim reader As SqlDataReader= SComm.ExecuteReader
Dim table As New DataTable()
table.Load(reader)
DatagridView1.DataSource=table
At Last close connection
SConn.Close()