5

Diese Frage scheint üblich zu sein, und ich ging durch diese answer bereits.Verwenden von SqlDataAdapter, um eine SqlDataReader-Quelle zu paginieren

Leider wird meine Seite immer noch nicht paged. Hier ist, was mein Code sieht aus wie 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(); 

Leider, wenn ich das tue, mein Paging nicht angezeigt. Mache ich etwas falsch?

Dank

+1

Erhalten Sie mehr als 15 Datensätze mit Ihrer Auswahl sicher? Legen Sie außerdem alle Paging-bezogenen Eigenschaften fest, BEVOR die Databind() -Methode aufgerufen wird. –

+0

Wow, das war einfach. Ich musste es nur vor der Datenbank() setzen. Vielen Dank! – Kevin

+0

Oh, was ist der Unterschied zwischen OnPageIndexChanging und OnPageIndexChanged? – Kevin

Antwort

6

Set alle der Paging-bezogenen Eigenschaften vor die Databind() Methode aufgerufen wird. Wenn Sie Custom Paging verwenden, müssen Sie das Ereignis GridView1_PageIndexChanging behandeln. Sie müssen den aktuellen Pageindex ändern und neu binden Ihre GridView wie folgt aus:

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

Wenn Sie auch die Gridview auf Page_Load bindend sind, tun Sie es wie folgt aus:

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

Meine erste Datenbank() war auf pageLoad. Wenn ich jedoch if (! IsPostBack) in mein GridView1_PageIndexChanging-Objekt einfüge, passiert beim ersten Klick nichts, wenn ich auf die nächste Seite der Gridview klicke. Wenn ich erneut klicke, geht es auf die nächste Seite. Ohne die if-Anweisung, tut es dies beim ersten Klick – Kevin

+0

Fügen Sie das! IsPostBack nicht in das PageIndexChanging, nur in der Page_Load, wie ich in der Antwort sage :) Ich werde es mit dem Ereignis zu aktualisieren, um Verwirrung zu vermeiden: P –

+0

Ah ok super danke! Aus Neugier, was macht das? Weil es scheinbar ohne das! IsPostBack im Pagenoad funktioniert? – Kevin

3

Sie müssen hinzufügen Das PageIndexChanging Ereignis von GridView aktivieren paging.

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