2012-01-30 2 views
1

DataPager 이상한 동작이 있습니다.DataPager가 두 번째 페이지 이상을 나열하지 않습니다

문제를 해결하려면 정보가있는 DataPagerReapeater이 있어야합니다. 그리고 나는 함께 일하기 위해 만든 DataPager, 을 가지고 있습니다. 3 페이지가 있지만, DataPager은 이상한 행동을합니다.

첫 번째 페이지를 클릭하고 다음을 클릭하면 두 번째로 넘어갑니다. 모든 것이 정상입니다. 다음에 다시 클릭하면 다시 게시되지만 3 번째 페이지로 이동하지는 않습니다. 마지막이고 처음에는 잘 작동합니다.

하지만 두 번째 페이지에서 다음을 클릭하면 세 번째 페이지로 이동하지 않지만 두 번째 페이지는 그대로 유지됩니다. 수동으로 세 번째 페이지를 클릭하고 이전을 클릭하는 경우와 동일하게 첫 번째 페이지로 이동합니다.

나는 이유를 정말로 모른다. 여기

DataPager입니다 :

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

} 

그래서, 행동이 정말 이상하고 내가 문제가 될 수있는 것을 아무 생각이 : 여기

<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> 

내가 미리 렌더링에 실행 코드입니다 .

누구든지 그런 문제에 직면 했습니까? 그 구성 요소가 여기에 양식을 사용

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() 뒤에있는 코드는 여기 :

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 : http://www.codeproject.com/Articles/45163/Extend-Repeater-to-support-DataPager

문제가 해결되면 datapagerrepeater가 올바른 방법으로 구현되지 않은 것처럼 보입니다. 그것을 고쳐라. 어쨌든 도와 줘서 고마워.

+0

page.ispostback을 선택 했습니까? –

+0

참고하시기 바랍니다, 글을 올리시기 전에 철자법 오류 등을 확인하십시오.) – jadarnel27

+0

잘못된 철자 오류를 발견하지 못했습니다! load_method로 게시물을 업데이트했습니다. – Alnedru

답변

1

로드 방법을 올바르게 읽으면 중계기를 모두 Page_Load 페이지 1로 재설정합니다.

무엇 일어나는 것은 :

  • Page_Load에서, 당신은 SetPagerProperties() 통화 제어 이벤트 발송 단계에서
  • 페이지 1 리피터를 다시 설정있는 DataPager 다음 페이지 페이지 상대적으로 고급입니다 1 : 그들은 상대 변경하지 않은 때문에
    • 당신이 "처음"과 "마지막"특정 페이지를 사용하는 경우, 모든 작업,
    • "다음" 1 페이지 뒤의 페이지로 이동하여 페이지 2에 걸린 이유는
    • 입니다.
    • "이전"은 1 이전 페이지로 이동하려고 시도합니다. 아무 것도 없기 때문에 1에 머물러 있습니다.

모든 페이지로드에 호출기를 초기화하는 중지,이 문제를 해결합니다. 전화를 제거하십시오 - 왜 그곳에 있는지 확실하지 않습니다. 예를 들어 사용자가 열 머리글을 클릭하여 목록보기를 정렬 한 후에 리피터를 "재설정"하는 데만 사용합니다. 또는 if (!IsPostback) 블록으로 이동하십시오.

+0

예, 맞습니다.하지만 지금 설정 한 경우에도 여기에 약간의 손실이 있습니다 (! 다시 게시). 나는 여전히 같은 문제가 있습니다. datapagerrepeater는 사용자 정의 컨트롤입니다.하지만 ... setPagerProperties를 사용하면 항상 0이 주어 지지만, 나는 tehre 인덱스가 증가 할 필요가 있다고 가정합니다. – Alnedru

+0

@ user1002583 리피터, 그러나'SetPagerProperties()'를 사용하여 표준'asp : DataPager '로 페이지를 수동으로 변경할 필요는 없습니다. 데이터 페이저 단추 중 하나를 클릭하면 호출기가 시작 행 인덱스를 늘리는 방법을 결정하고 페이징 된 컨트롤에서 메서드를 올바르게 호출합니다. – millimoose

+0

@ user1002583 또한 문제가 CodeProject의'DataPagerRepeater'에 있다면, 왜 그것을 전혀 사용하지 않습니까? 페이징을 지원하는 표준 [ListView] (http://msdn.microsoft.com/en-us/library/ie/bb398790.aspx)을 사용할 수있는 것 같습니다. – millimoose

관련 문제