2012-01-30 53 views
1

DataPager有一些奇怪的行爲。DataPager沒有列出比第二頁

因此,爲了解決這個問題,我有一個DataPagerReapeater的信息。我有一個DataPager, ,這是我一起工作的。我有3頁,但DataPager有一些奇怪的行爲。

當我在第一頁上,然後點擊下一頁,它會到第二,一切都很好。當我再次點擊下一步時,它會進行回發,但不會移至第3頁。最後和第一也很好。

但是,當我在第二頁上,然後點擊下一頁時,它將不會移動到第三頁,但會停留在第二頁上。如果我手動點擊第三頁然後點擊上一頁,則會轉到第一頁。

我真的不明白爲什麼。

這裏是DataPager

<asp:DataPager ID="DataPager1" PagedControlID="ReapeaterCSGator" PageSize="5" 
     runat="server" onprerender="DataPager1_PreRender"> 
    <fields> 
      <asp:NextPreviousPagerField ButtonType="Link" ShowFirstPageButton="True" FirstPageText="<< First" 
      ShowNextPageButton="False" ShowPreviousPageButton="False" /> 
     <asp:NextPreviousPagerField ButtonType="Link" ShowFirstPageButton="False" FirstPageText="< Previous" 
      ShowNextPageButton="False" ShowPreviousPageButton="True" /> 
     <asp:NumericPagerField /> 
     <asp:NextPreviousPagerField ButtonType="Link" ShowLastPageButton="False" LastPageText="Next >" 
      ShowNextPageButton="True" ShowPreviousPageButton="False" /> 
     <asp:NextPreviousPagerField ButtonType="Link" ShowLastPageButton="True" LastPageText="Last >>" 
      ShowNextPageButton="False" ShowPreviousPageButton="False" /> 
    </fields> 
</asp:DataPager> 

下面是我對的PreRender執行代碼:

protected override void OnPreRender(EventArgs e) 
{ 
    base.OnPreRender(e); 

    IEnumerable<CollaborativeSpace> listCS = LoadCollaborativeSpaces(); 
    // Binding the repeater with the list of documents 
    ReapeaterCSGator.DataSource = listCS; 
    ReapeaterCSGator.DataBind(); 

} 

因此,該行爲是非常奇怪的,我不知道這個問題可能是什麼。

還有人遇到過這樣的問題嗎?

UPDATE:這裏是上負載的方法和我有在那裏什麼:

 ResultPerPages = GetResultsPerPage(); 
     DataPager2.PageSize = ResultPerPages; 
     DataPager1.PageSize = ResultPerPages; 
     //We initialize the pager repeater with the same value 
     ReapeaterCSGator.SetPageProperties(0, ResultPerPages, false); 
     //We add an handler on item data bound event for sub repeater 
     ReapeaterCSGator.ItemDataBound += ReapeaterCSGator_ItemDataBound; 
     //If the user is not post backing 
     if (!IsPostBack) 
     { 
      //We add choices on drop down list "Results per page" 
      foreach (int choice in NbResultsChoices) 
      { 
       NbResultsPerPage.Items.Add(new ListItem(choice + " results per page", choice.ToString(CultureInfo.InvariantCulture))); 
      } 
      //We get collaborative spaces from Sharepoint list 
      //IEnumerable<CollaborativeSpace> listCS = LoadCollaborativeSpaces(); 
      //// Binding the repeater with the list of documents 
      //ReapeaterCSGator.DataSource = listCS; 

更新2: 下面是

public void SetPageProperties(int startRowIndex, int maximumRows, bool databind) 
    { 
     ViewState["_startRowIndex"] =startRowIndex; 
     ViewState["_maximumRows"] = maximumRows; 
     if (TotalRows > -1) 
     { 
      if (TotalRowCountAvailable != null) 
      { 
       TotalRowCountAvailable(this, new PageEventArgs((int)ViewState["_startRowIndex"], (int)ViewState["_maximumRows"], TotalRows)); 
      } 
     } 
    } 

該組件使用形式此處SetPageProperties()後面的代碼:http://www.codeproject.com/Articles/45163/Extend-Repeater-to-support-DataPager

問題已解決,似乎datapagerrepeater沒有正確實施,現在我發現我可以的來源 修理它。無論如何請幫助

+0

你檢查了page.ispostback? – 2012-01-30 16:23:35

+0

僅供參考,請在發佈前檢查您的帖子是否存在拼寫錯誤等=) – jadarnel27 2012-01-30 16:27:24

+0

我沒有發現任何錯誤的拼寫錯誤!用load_method更新了帖子 – Alnedru 2012-01-30 16:41:15

回答

1

如果我正確地讀取了您的加載方法,您將在每個Page_Load上將中繼器重置爲第1頁。

什麼情況是:

  • Page_Load,你中繼重置爲第1頁中SetPagerProperties()通話
  • 在控制事件調度階段,DataPager的前進到下一個頁面相對於頁面1
    • 如果使用「第一」,「最後」和特定頁面,一切正常,因爲他們不是相對變化
    • 「下一步」轉到第1頁之後的頁面,這就是爲什麼你被卡在第2頁上的原因,
    • 「previous」試圖在1之前去頁面,因爲沒有,它保持在1。

爲了解決這個問題,停止初始化每個頁面加載尋呼機。要麼擺脫電話 - 我不知道爲什麼它在那裏,我只用它來「重置」中繼器,例如在用戶單擊列標題來排序列表視圖之後。或將其移入if (!IsPostback)區塊。

+0

是的,你是對的,但是即使我把它設置在(!回發)中,我現在仍然有點失落,但我仍然有同樣的問題。 datapagerrepeater是自定義控件,不是由我...但事情是它總是給setPagerProperties 0,但我想我需要給這個索引,增加..或什麼 – Alnedru 2012-01-31 10:24:34

+0

@ user1002583不知道中繼器,但您不需要使用'SetPagerProperties()'手動更改具有標準'asp:DataPager'的頁面。當您單擊其中一個數據尋呼機按鈕時,尋呼機將確定如何增加起始行索引,並正確調用分頁控件上的方法。 – millimoose 2012-01-31 13:50:03

+0

@ user1002583另外,如果問題出在CodeProject的'DataPagerRepeater'上,爲什麼要使用它呢?看起來你可以使用標準的[ListView](http://msdn.microsoft.com/en-us/library/ie/bb398790.aspx),它也支持分頁。 – millimoose 2012-01-31 13:51:19

相關問題