Ciao. le soluzioni che mi vengono in mente sono due.
1) Se vuoi fare una nuova chiamata al Db, lo fai con una select attraverso un command e un dataadapter.
Ad esempio:
//preparo la mia query col valore del querystring
string query ="Select * from mia_tabella where id_mio =" Request.QueryString["mio_valore"];
SqlConnection conn = new SqlConnection();
//creo la mia connessione al db coi suoi parametri
conn.ConnectionString = ....................;
//passo al mio command la connessione e la select
SqlCommand sqlcm = new SqlCommand(query , conn);
//preparo il dataset che ospiterà i dati della mia query
DataSet ds = new DataSet();
//apro la connessione
conn.Open();
//creo il mio dataadapter che riempirà il dataset
SqlDataAdapter da = new SqlDataAdapter();
//gli associo il mio command
da.SelectCommand = sqlcm;
//eseguo e riempio il mio dataset, che posso chiamare come voglio
da.Fill(ds, "prova");
//chiudo la connessione
conn.Close();
A questo punto hai un dataset che in teoria dovrebbe contenere solo la riga che hai selezionato.
Poi, passi il dataset come datasource della gridview e fai il databind
2) Se non vuoi fare una nuova chiamata, c'è la possibilità di mettere i dati della riga selezionata in Session, ma è rischioso (per motivi di sicurezza) e non viene molto consigliato