5

Questa domanda sembra essere comune e ho già utilizzato questo answer.Utilizzo di SqlDataAdapter per visualizzare una sorgente SqlDataReader

Sfortunatamente, la mia pagina non viene ancora cercata. Ecco ciò che il mio codice è simile in C#:

SqlCommand command = new SqlCommand("(SELECT ......", Connection); 
SqlDataAdapter myAdapter = new SqlDataAdapter(command); 
DataTable dt = new DataTable(); 
myAdapter.Fill(dt); 

command.Connection = connection; 
command.Connection.Open(); 

GridView1.DataSource = dt; 
GridView1.DataBind(); 
GridView1.AllowPaging = true; 
GridView1.PageSize = 15; 

command.Connection.Close(); 
command.Connection.Dispose(); 

Purtroppo, quando faccio questo, il mio paging non si presenta. Sto facendo qualcosa di sbagliato?

Grazie

+1

Stai ottenendo più di 15 record con la tua selezione di sicuro? Inoltre, impostare tutte le proprietà relative al paging PRIMA che venga chiamato il metodo Databind(). –

+0

Wow, è stato facile. Ho appena dovuto impostarlo prima del database(). Grazie! – Kevin

+0

Oh qual è la differenza tra OnPageIndexChanging e OnPageIndexChanged? – Kevin

risposta

6

impostare tutte le proprietà di paging relativi prima si chiama il metodo Databind(). Quando si utilizza Paging personalizzato, sarà necessario gestire l'evento GridView1_PageIndexChanging. È necessario modificare il pageIndex corrente e ri-vincolare il proprio GridView in questo modo:

void bindGridview() 
{ 
    SqlCommand command = new SqlCommand("(SELECT ......", Connection); 
    SqlDataAdapter myAdapter = new SqlDataAdapter(command); 
    DataTable dt = new DataTable(); 
    myAdapter.Fill(dt); 

    command.Connection = connection; 
    command.Connection.Open(); 
    GridView1.AllowPaging = true; 
    GridView1.PageSize = 15; 
    GridView1.DataSource = dt; 
    GridView1.DataBind(); 


    command.Connection.Close(); 
    command.Connection.Dispose(); 
} 

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    GridView1.PageIndex = e.NewPageIndex; 
    bindGridview(); 
} 

Se si vincola anche il GridView su Page_Load, fare in questo modo:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
     bindGridview(); 
} 
+0

Il mio primo database() era su pageLoad. Tuttavia, quando aggiungo if (! IsPostBack) al mio oggetto GridView1_PageIndexChanging, quando clicco per andare alla pagina successiva di gridview, non succede niente la prima volta. Quando faccio di nuovo clic, passa alla pagina successiva. Senza la dichiarazione if, lo fa al primo click – Kevin

+0

Non aggiungere il! IsPostBack nel PageIndexChanging, solo nella pagina Page_Load come dico nella risposta :) Lo aggiornerò con l'evento per evitare confusione: P –

+0

Ah ok grazie! Per curiosità, cosa fa questo? Perché sembra funzionare senza! IsPostBack nel pageload? – Kevin

3

è necessario aggiungere l'evento PageIndexChanging di GridView per abilitare paging.

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    GridView1.PageIndex = e.NewPageIndex; 
    bindGridview(); 
} 
Problemi correlati