5

Cette question semble être commune et je suis passé par ce answer déjà.En utilisant SqlDataAdapter à la page une source SqlDataReader

Malheureusement, ma page n'est toujours pas paginée. Voici ce que mon code ressemble en 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(); 

Malheureusement, quand je le fais, ma pagination ne se présente pas. Est-ce que je fais quelque chose de mal?

Merci

+1

Obtenez-vous plus de 15 enregistrements avec votre sélection à coup sûr? En outre, définissez toutes les propriétés relatives à la pagination AVANT que la méthode Databind() soit appelée. –

+0

Wow, c'était facile. Je devais juste le mettre avant le databind(). Merci! – Kevin

+0

Oh, quelle est la différence entre OnPageIndexChanging et OnPageIndexChanged? – Kevin

Répondre

6

Définir toutes les propriétés liées radiomessagerie-avant la méthode Databind() est appelée. Lorsque vous utilisez Custom Paging, vous devrez gérer l'événement GridView1_PageIndexChanging. Vous devez changer le PageIndex en cours, et re-lier votre GridView comme ceci:

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(); 
} 

Si vous liez aussi la GridView Page_Load, fais comme ça:

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

Ma première base de données() était sur pageLoad. Cependant, quand j'ajoute if (! IsPostBack) dans mes trucs GridView1_PageIndexChanging, quand je clique pour aller à la page suivante de la grille, rien ne se passe la première fois. Quand je clique à nouveau, cela va à la page suivante. Sans l'instruction if, il le fait sur le premier clic – Kevin

+0

Ne pas ajouter le IsPostBack dans le PageIndexChanging, juste dans le Page_Load comme je le dis dans la réponse :) Je vais le mettre à jour avec l'événement pour éviter toute confusion: P Ah –

+0

ok merci beaucoup! Par curiosité, qu'est-ce que ça fait? Parce qu'il semble fonctionner sans! IsPostBack dans la pageload? – Kevin

3

Vous devez ajouter l'événement PageIndexChanging de GridView pour activer paging.

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