you have to set the connection string for the sqlcommand:
cmd.Connection = New SqlConnection(connStr)
This is another good reason to only put a single line within a Try/Catch block. When you have multiple lines of code, if you don't look at the StackTrace, you can't tell where the error came from sometimes.
So, I would put the cmd.Connection.Open in a Try/Cath and the cmd.ExecuteReader in a Try/Catch.
Close will only throw an error if Open does.
Dispose won't throw an error. Neither will GridView.DataBind.