﻿# ListView + DataPager 在不使用 LinqDataSource 時會有問題

ASP.NET 3.5 中新增的 ListView、DataPager 與 LinqDataSource 控制項可說是絕佳拍檔，不過當你不使用 LinqDataSource 的時候會發生一個小問題，就是當你在第一次點選 DataPager 中的頁碼時並不會跟著跳頁，而點選第二次的時候才會正常運作！所謂的「不使用 LinqDataSource 的時候」是指你的資料來源的取得可能是寫在 Code Behind 中或是使用 ObjectDataSource 或 SqlDataSource 控制項，例如：

```
protected void Page_Load(object sender, EventArgs e)
{
    var q = from p in db.News select p;
    ListView2.DataSource = q;
    ListView2.DataBind();
}
```

要解決這個問題必須要在 ListView 控制項宣告 OnPagePropertiesChanging 個事件，並執行該 DataPager 的 SetPageProperties 方法，範例程式如下：

```
protected void Page_Init(object sender, EventArgs e)
{
    ListView2.PagePropertiesChanging += 
        new EventHandler<PagePropertiesChangingEventArgs>(ListView2_PagePropertiesChanging);
}

void ListView2_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
{
    ListView srcListView = sender as ListView;
    this.DataPager1.SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
    srcListView.DataBind();
}
```

**相關連結**

-   [DataPager - ASP.NET Forums](http://forums.asp.net/t/1215848.aspx)  
    
-   [DataPager 類別](http://msdn2.microsoft.com/zh-tw/library/system.web.ui.webcontrols.datapager.aspx)  
    
-   [ListView 類別](http://msdn2.microsoft.com/zh-tw/library/system.web.ui.webcontrols.listview.aspx)  
    
-   [ListView.PagePropertiesChanging 事件](http://msdn2.microsoft.com/zh-tw/library/system.web.ui.webcontrols.listview.pagepropertieschanging.aspx)
