2009-07-30 3 views
5

У меня есть страница с элементом управления списком и элементом управления datapager. ListViews DataSource устанавливается программно с помощью этого кода:LINQ и пейджинг со списком

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

Когда я проверить эту страницу в браузере он приходит с ошибкой: «ListView с идентификатором„ListView1“должен иметь источник данных, который реализует ICollection или может выполнить подкачку источника данных, если AllowPaging - true. '

Как я могу реализовать пейджинг в этом сценарии?

Благодаря

ответ

18

Попробуйте

listview1.DataSource = bookmarks.ToArray() 

У меня была такая же проблема на этой неделе.

+0

Thankyou так много! Очень быстрый ответ. Не могу поверить, что это было что-то простое. – j82374823749

+0

Одна из незначительных проблем, я должен дважды щелкнуть по номерам страниц, прежде чем перейти к следующей странице или предыдущей странице. Любая идея, как это решить? Благодарю. – j82374823749

+1

Лучше использовать 'ToArray()' - он немного более легкий, если вам действительно не нужны полные функциональные возможности 'List' (например, добавление новых элементов) - чего вы здесь не делаете; и массивы реализуют 'ICollection' (и' IList') в противном случае. –

2

Ответ на клик-два раза проблема, что OP впоследствии столкнулись - переместить DataBind в обработчик события OnPreRender:

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

или возможно создать страницу свойств меняющимися и bindlistview там.

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(); 
} 
Смежные вопросы