2009-07-30 9 views
5

Ho una pagina con un controllo listview e un controllo datapager. L'origine dati listviews viene impostato programatically utilizzando questo codice:LINQ e paging con listview

 
Dim dal as new dalDataContext 
Dim bookmarks = From data In dal.getData(userid) 
listview1.DataSource = bookmarks 
listview1.DataBind() 

Quando ho verificare questa pagina in un browser si tratta con l'errore: 'ListView con id 'ListView1' deve avere una fonte di dati che o implementa ICollection o può eseguire il paging dell'origine dati se AllowPaging è true. '

Come posso implementare il paging in questo scenario?

Grazie

risposta

18

Prova

listview1.DataSource = bookmarks.ToArray() 

Ho avuto lo stesso problema questa settimana.

+0

Grazie mille! Risposta molto rapida. Non posso credere che fosse qualcosa di così semplice. – j82374823749

+0

Un piccolo problema, devo fare clic sui numeri di pagina due volte prima di andare alla pagina successiva o alla pagina precedente. Qualche idea su come risolvere questo? Grazie. – j82374823749

+1

Meglio ancora usare 'ToArray()' - è leggermente più leggero se non hai realmente bisogno della piena funzionalità di 'List' (come l'aggiunta di nuovi elementi) - che non fai qui; e gli array implementano 'ICollection' (e' IList') in caso contrario. –

2

Una risposta al problema click-doppio rispetto a quello del PO successivamente incontrato - spostare il databind al gestore di eventi OnPreRender:

protected void Page_PreRender(object sender, EventArgs e) 
    { 
     listview1.DataBind(); 
    } 
0

o forse creare una proprietà della pagina spogliatoi e bindlistview lì.

protected void lv_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e) 
{ 
    //set current page startindex, max rows and rebind to false 
    DataPager dp = lvNews.FindControl("lvDataPager1") as DataPager; 
    dp.SetPageProperties(e.StartRowIndex, e.MaximumRows, false); 

    BindListView(); 
}