I can't see what is wrong with that. I sometimes use something very similar to fill the DataGridView when I need to display records that I don't need to update.
vb.net Code:
  1. Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Nwind.mdb;")
  2. Dim SQLString As String = _
  3.     "SELECT CustomerID, ContactName " & _
  4.     "FROM Customers " & _
  5.     "WHERE CustomerID LIKE @CustID " & _
  6.     "AND ContactName LIKE @ContName"
  7.  
  8. Dim cmd As New OleDbCommand(SQLString, conn)
  9. cmd.Parameters.AddWithValue("@CustID", "%" & Me.TextBox1.Text & "%")
  10. cmd.Parameters.AddWithValue("@ContName", "%" & Me.TextBox2.Text & "%")
  11.  
  12. conn.Open()
  13. Dim dr As OleDbDataReader = cmd.ExecuteReader()
  14. Dim dt As New DataTable()
  15. dt.Load(dr)
  16.  
  17. Me.DataGridView1.DataSource = dt
  18.  
  19. dr.Close()
  20. conn.Close()

So this populates the DataGridView with the correct amount of rows, but doesn't actually put any values in the cells?