2009-07-30 5 views
5

Ich habe eine Seite mit einem Listview-Steuerelement und einem Datapager-Steuerelement. Die Listview-Datenquelle ist programmatisch mit diesem Code festgelegt:LINQ und Paging mit einem Listenansicht

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

Wenn ich diese Seite in einem Browser testen mit dem Fehler kommt: ‚Listview mit id‚ListView1‘muss eine Datenquelle haben, die entweder implementiert ICollection oder können Führen Sie das Paging der Datenquelle durch, wenn AllowPaging wahr ist. '

Wie kann ich Paging in diesem Szenario implementieren?

Dank

Antwort

18

Versuchen

listview1.DataSource = bookmarks.ToArray() 

ich diese Woche hatte das gleiche Problem.

+0

Vielen Dank! Sehr schnelle Antwort. Ich kann nicht glauben, dass es so einfach war. – j82374823749

+0

Ein kleines Problem, ich muss zweimal auf die Seitenzahlen klicken, bevor es auf die nächste Seite oder vorherige Seite geht. Irgendeine Idee, wie man das löst? Vielen Dank. – j82374823749

+1

Besser noch 'ToArray()' verwenden - es ist etwas leichter, wenn Sie nicht wirklich volle Funktionalität von 'List' benötigen (wie das Hinzufügen neuer Elemente) - was Sie hier nicht finden; und Arrays implementieren andernfalls "ICollection" (und "IList"). –

2

Eine Antwort auf den Klick zweimal Problem, dass der OP anschließend begegnet - die DataBind an dem Handler OnPreRender Ereignisse verschieben:

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

oder vielleicht eine Seite Eigenschaften zu verändern und bindlistview dort erstellen.

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