Search code examples
asp.netlistviewdatapager

DataPager does not load new pages for ListView


I have a DataPager control that I am using with my ListView and when the page loads the pager shows the first, next, last, preivous, and 10 pages but when I click any of the buttons or the hyperlinks for a page nothing happens, no matter how many times I click. I have heard that you have to do something in preredender but have not see any code on how this works. Can anyone tell me what code I am supposed to put in prerender (and how to call the prerender) if that is the solution and if it is not how to get my datapager working?

<asp:UpdatePanel ID="upSearchResults" runat="server">
    <ContentTemplate>

        <asp:Label ID="lblErrorMSG" CssClass="ErrorText" runat="server" />

        <asp:Panel ID="plSearchResults" runat="server">
            <table  style="width: 100%" border="1">
                <tr>
                    <td>
                        <asp:Literal ID="lblTitleRow" runat="server" />
                    </td>
                    <td>
                        <asp:Literal ID="lblDescriptionRow" runat="server" />
                    </td>
                    <td class="TableSelectButton">
                        <asp:Button ID="btnAddNewItem" Text="Select" runat="server" />
                    </td>
                </tr>

                <asp:ListView ID="lvSearchResults"  runat="server">

                    <LayoutTemplate>
                        <tr id="itemPlaceHolder" runat="server" />
                    </LayoutTemplate>

                    <ItemTemplate>
                        <tr>
                            <td>
                                <%#Eval("Title")%>
                            </td>
                            <td>
                                <%#Eval("Descript")%>
                            </td>
                            <td class="TableSelectButton">
                                <asp:Button ID="btnEditItem" Text="Select" PostBackUrl='<%#String.Format("{0}.aspx?ID={1}&SectionID={2}", Eval("PageName"), Eval("ID"), ddlMediaTitle.SelectedValue.ToString())%>' runat="server" />
                            </td>
                        </tr>
                    </ItemTemplate>

                </asp:ListView>
            </table>
        </asp:Panel>

        <div class="Center">
            <asp:DataPager ID="dpSearchResults" PagedControlID="lvSearchResults" PageSize="10" runat="server"> 
                <Fields> 
                    <asp:NextPreviousPagerField ButtonType="Button" ShowNextPageButton="false" ShowFirstPageButton="true" ShowLastPageButton="false" ShowPreviousPageButton="true" /> 
                    <asp:NumericPagerField ButtonCount="10" /> 
                    <asp:NextPreviousPagerField ButtonType="Button" ShowNextPageButton="true" ShowFirstPageButton="false" ShowLastPageButton="true" ShowPreviousPageButton="false" /> 
                </Fields> 
            </asp:DataPager>
        </div>

    </ContentTemplate>

    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnSearch" EventName="Click" />
    </Triggers>

</asp:UpdatePanel>

Solution

  • I was able to get your code sample to work by doing two things. First in the list view control I added the OnPagePropertiesChanged event and bound the data again.

    <asp:ListView ID="lvSearchResults"  runat="server" 
        OnPagePropertiesChanged="lvSearchResults_PagePropertiesChanged">
    

    In the code behind:

    protected void lvSearchResults_PagePropertiesChanged(object sender, EventArgs e)
    {
        //bind the lvSearchResults
    }
    

    In order to get the update panel to work I used this trigger instead:

    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="lvSearchResults"
            EventName="PagePropertiesChanged" />
    </Triggers>
    

    One recommendation I have is to add update panels absolutely last after you have everything working. They seem to hide a lot of problems and make them more difficult to solve.

    Enjoy!