Je peux voir que vous remplissez manuellement le GridView en définissant les cellules de chaque ligne avec la valeur que vous obtenez du lecteur de données.
Mais en fait, vous pouvez remplir la grille simplement :
GridView1.DataSource = dt
GridView1.DataBind()