[C#]-WEBFORM-ListView + DataPager 在不使用 LinqDataSource 時會有問題

摘要:[C#]-ListView + DataPager 在不使用 LinqDataSource 時會有問題

 

參考網址:

http://blog.miniasp.com/post/2008/04/Problem-in-ListView-with-DataPager-when-not-using-LinqDataSource.aspx

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