2009-07-30 22 views
5

Tengo una página con un control listview y un control de datapager. El origen de datos de listas se establece mediante programación utilizando este código:LINQ y paginación con una vista de lista

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

cuando pruebo esta página en un navegador que viene con el error: 'ListView con id 'ListView1' debe tener una fuente de datos al cual implementa ICollection o lata realizar paginación de origen de datos si AllowPaging es verdadero. '

¿Cómo puedo implementar la búsqueda en este escenario?

Gracias

Respuesta

18

Trate

listview1.DataSource = bookmarks.ToArray() 

que tenían el mismo problema esta semana.

+0

Gracias tanto! Respuesta muy rápida No puedo creer que sea algo tan simple. – j82374823749

+0

Un problema menor, tengo que hacer clic en los números de página dos veces antes de ir a la página siguiente o anterior. Alguna idea de como resolver esto? Gracias. – j82374823749

+1

Mejor aún, use 'ToArray()' - es un poco más liviano si realmente no necesita la funcionalidad completa de 'List' (como agregar nuevos elementos), lo que no hace aquí; y las matrices implementan 'ICollection' (y' IList') de lo contrario. –

2

Una respuesta al problema de clic dos veces que el PO se encontró posteriormente - mover el databind al controlador de eventos OnPreRender:

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

o tal vez crear una página de propiedades cambiantes y bindlistview allí.

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