2009-07-30 12 views
5

Mam stronę z kontrolką listview i formantem danych. Listviews DataSource jest ustawiony programowo przy użyciu tego kodu:LINQ i stronicowanie z widokiem listy

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

Kiedy przetestować tę stronę w przeglądarce to pojawia się z błędem: „ListView z id«listview1»musi mieć źródło danych, które albo implementuje kolekcji ICollection lub można wykonaj stronicowanie źródła danych, jeśli AllowPaging jest prawdziwe. "

Jak mogę zaimplementować stronicowanie w tym scenariuszu?

Dzięki

Odpowiedz

18

Spróbuj

listview1.DataSource = bookmarks.ToArray() 

Miałem ten sam problem w tym tygodniu.

+0

Dziękuję bardzo! Bardzo szybka odpowiedź. Nie mogę uwierzyć, że to było coś tak prostego. – j82374823749

+0

Jeden mały problem, muszę dwa razy kliknąć numery stron, zanim przejdzie do następnej strony lub poprzedniej strony. Każdy pomysł, jak to rozwiązać? Dzięki. – j82374823749

+1

Lepiej używać 'ToArray()' - jest nieco bardziej lekki, jeśli nie potrzebujesz pełnej funkcjonalności 'List' (takiej jak dodawanie nowych elementów) - czego tutaj nie ma; a tablice implementują "ICollection" (i "IList") w przeciwnym razie. –

2

Odpowiedź na problem click-dwa razy, że OP następnie napotkał - przesunąć databind do obsługi zdarzeń OnPreRender:

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

lub może utworzyć właściwości strony zmienia i bindlistview tam.

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(); 
} 
Powiązane problemy