Once you set DataSource property of datagridview it overrides the previously datasource if source assigned. That is why you are getting only those records which were recently requested.
I would suggest it to fix with two ways:
1) Collect all IDs in either a "string" (comma separated) or "List(of Integer)" and pass these Ids every time you fetch data from database. Using this way "DataSource" way would work.
2) Don't set DataSource property of DataGridView instead, iterate on all rows of DataTable/DataSet (which were set to DataSource property) and use
DataGridView.Rows.Add() methods something like this:
This piece of code can provide you an idea on how to accomplish task:(untested)
Dim dt as DataTable = RetrieveDataTable()
For Each row as DataRow in dt.Rows
DataGridView1.Rows.Add(new Object() { row(0), row(1),....})
Next
Hope it helps!