2009-07-30 39 views
5

Tôi có một trang với một điều khiển listview và một điều khiển datapager. Các nguồn dữ liệu listviews được thiết lập programatically sử dụng mã này:LINQ và phân trang với một listview

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

Khi tôi kiểm tra trang này trong một trình duyệt nó đi kèm với các lỗi: 'ListView với id 'listview1' phải có một nguồn dữ liệu mà một trong hai thực hiện ICollection hoặc có thể thực hiện phân trang nguồn dữ liệu nếu AllowPaging là đúng. '

Làm cách nào để triển khai phân trang trong trường hợp này?

Cảm ơn

Trả lời

18

Hãy thử

listview1.DataSource = bookmarks.ToArray() 

tôi đã cùng một vấn đề trong tuần này.

+0

Thankyou rất nhiều! Phản ứng rất nhanh. Không thể tin rằng đó là một cái gì đó đơn giản. – j82374823749

+0

Một vấn đề nhỏ, tôi phải bấm số trang hai lần trước khi nó đi đến trang tiếp theo hoặc trang trước đó. Bất kỳ ý tưởng làm thế nào để giải quyết điều này? Cảm ơn. – j82374823749

+1

Tốt hơn nên sử dụng 'ToArray()' - nó nhẹ hơn một chút nếu bạn không thực sự cần đầy đủ chức năng của 'List' (chẳng hạn như thêm các mục mới) - mà bạn không có ở đây; và các mảng thực hiện 'ICollection' (và' IList') nếu không. –

2

Một câu trả lời cho vấn đề nhấp hai lần rằng OP sau đó gặp phải - di chuyển DataBind để xử lý sự kiện OnPreRender:

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

hoặc có thể tạo ra một thuộc tính trang thay đổi và 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(); 
} 
Các vấn đề liên quan