2014-03-24 2 views
0

업데이트 패널에 타이머가 있습니다. 패널에 일부 레코드가있는 중계기가 있습니다. 또한 PagedDataSource를 사용하여 리피터의 데이터를 매김합니다. 리피터의 페이지 크기를 다시로드하는 onchange 이벤트에 서버 메소드를 추가했습니다. 이 이벤트는 필요한 경우 시작되지만 타이머 틱이 실행될 때만 데이터가 다시로드됩니다. 따라서 페이지 크기가 바뀌면 가끔씩 전체 타이머 간격을 기다렸다가 페이지 크기가 바뀌어야합니다. 왜 이런 일이 일어날 지 설명 할 수 있을까요? 어떤 도움이 여기 C# onchange 이벤트는 타이머가 실행될 때만 데이터를 다시로드합니다. 왜?

감사 내 코드

<form id="linksForm" runat="server"> 
    <div> 

     <div style="float: left; background-color: white"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
     <asp:Button ID="DisplayAllLinksBT" OnClick="DisplayAllLinks" runat="server" Text="Visi"/> 
     <asp:Button ID="DisplayNewLinksBT" OnClick="DisplayNewLinks" runat="server" Text="Nauji" /> 
     <asp:Timer ID="TimerLinks" runat="server" Interval="10000" OnTick="OnLinksRepeaterTick"> 
     </asp:Timer> 
     <asp:UpdatePanel ID="LinksPanel" UpdateMode="Always" runat="server"> 
     <ContentTemplate> 

     <div id="loadingImageArea"></div> 

     <table style="border: none;"> 

     <% if (!HasPermission) 
     { %> 
      <tr> 
       <th> 
        <td style="color: green;">Upvotes</td> 
        <td style="color: red;">Downvotes</td> 
       </th> 
      </tr> 
     <% } %> 
     <asp:Repeater ID="LinksRepeater" runat="server"> 
      <ItemTemplate> 
      <tr> 
      ... 
      <asp:Label ID="PageSizeLabel" runat="server" Text="Rodyti"></asp:Label> 
      &nbsp;<asp:DropDownList ID="PageSizeSelection" Width="60" runat="server" OnSelectedIndexChanged="PageSizeSelection_SelectedIndexChanged"> 
      </asp:DropDownList> 
     </ContentTemplate> 
     </asp:UpdatePanel> 
     </div> 

서버 측의 일부입니다 될 것이다 :

protected void PageSizeSelection_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var pageSize = Int32.Parse(PageSizeSelection.SelectedValue); 
    SessionHelper.PutValue(PageSizeSessionVariable, pageSize); 

    var lastPageIndex = Math.Ceiling(
     ((float) ((PagedDataSource) LinksRepeater.DataSource).DataSourceCount)/ 
     (int)pageSize) - 1; 

    var currentPageIndex = ((PagedDataSource) LinksRepeater.DataSource).CurrentPageIndex; 

    if (lastPageIndex > 0 && currentPageIndex > lastPageIndex) 
    { 
     SessionHelper.PutValue(CurrentPageIndexSessionVariable, (int)lastPageIndex); 
    } 

    LoadLinks(); 
} 

답변

0

내가 드롭 다운 목록 autopostback="true"를 설정하여 그것을 해결합니다.

관련 문제