Gridview scompare durante il postback quando è attivato il paging
-
06-09-2019 - |
Domanda
Ho una gridview che ha la proprietà DataSourceID set personalizzato per un ObjectDataSource oggetto.Quando AllowPaging è impostata su True, il GridView scompare dopo un postback.Se ho impostato AllowPaging False va bene.Qualcuno può far luce su questo per me?:)
Edit: L'altra cosa che mi sono confuso circa è ho pensato che se si imposta la DataSourceID che la griglia di ottenere i dati dall'origine dati ogni volta che è necessario.Se la griglia è in via di estinzione perché non contiene i dati, perché non è il gridview ottenere i dati dall'origine dati?
Soluzione
E 'possibile che dopo che si verifica il postback l'origine dati non viene mantenuta o riempito e non ci sono elementi per popolare la griglia. Stai gestendo stato correttamente per l'oggetto origine dati (rilegatura / mantenere la fonte viva) quando il paging è attivato?
Questo può sembrare una risposta vaga, ma senza un esempio di come la fonte è sempre il dato è un po 'difficile da diagnosticare perché gli articoli sarebbero spariti.
Modifica:
Il metodo Stavo pensando di stato per la richiamata di paging / ordinamento. Tuttavia ho trovato alcune informazioni ont lui ODS e Paging .. assicurarsi di aver impostato il seguente:
- GridView: AllowPaging e ovviamente è necessario impostare PageSize.
- ObjectDataSource: EnablePaging, anche è necessario impostare il:
- MaximumRowsParameterName = "maxRows"
- StartRowIndexParameterName = "startRowIndex"
- SelectCountMethod = "RecordCount"
Credo che avete solo bisogno di impostare le voci 3 sub di punto 2 se si desidera gestire dimensioni di paging ecc manualmente.
Poi si può leggere di più su questo qui .
Altri suggerimenti
Per rispondere a più di @adam0101 risposta, cosa Penso si intende per "...Si scopre che mia origine dati personalizzati di ritorno zero per il conteggio dei record.", è che potrebbe essere necessario "ri-collegare"l'origine dati per il gridview.ASP.net automaticamente sa che sei retriving record'n', dove 'n' è la prima riga della pagina successiva.Questa soluzione è più semplice per i casi in cui non si desidera consentire l'asp.net per gestire automaticamente i dati nel gridview, forse a causa di voler caricare i dati dopo un altro evento (un CARICO di DATI pulsante per esempio), e non quando la pagina è caricata per la prima volta.Ma come Adamo menzionati qui di seguito il vero motivo era lui "...aveva creato un datasource sottoclasse che ereditato ObjectDataSource, ma è stato implementato in modo non corretto.".Mi dispiace per la mia ipotesi c'Adamo.Grazie
Tuttavia, il resto della mia soluzione penso che funzionerà per chi è bloccato sull'utilizzo manualmente derivati fonti di dati.
ie
Impostare il GridView come sopra, e senza una proprietà DataSource!Qui è il mio esempio:
<asp:GridView ID="gvStudents" DataKeyNames="StudentID" runat="server"
ShowFooter="True" AutoGenerateColumns="False" Width="100%" AllowSorting="True" AllowPaging="true" PageSize="10" OnPageIndexChanging="gvStudents_PageIndexChanging">
Fate un metodo privato o di routine che si possono chiamare quando ti serve per forza il gridview in una nuova pagina.
private void BindGridViewServer(GridView gv1)
{
gv1.DataSource = sdsStudents; //re-attach the datasource
gv1.DataBind(); //get a page of data AllowPaging must be true
}
Quindi, creare un OnPageIndexChanging
metodo:
protected void gvStudents_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView myGV = (GridView)sender;
myGV.PageIndex = e.NewPageIndex;
BindGridViewServer(myGV);
}
Per completare questa risposta, ecco il mio codice dove caricare i dati, quando ho voglia, non quando un PostPack è licenziato, che è il default...
protected void btnSEARCH(object sender, EventArgs e)
{
//some code
//bind the gridview to the datasource here and then bind!
gvStudents.DataSource = sdsStudents;
gvStudents.DataBind();
//more code etc
}