DataPager不会为ListView加载新页面

时间:2012-09-11 01:46:32

标签: asp.net listview datapager

我有一个DataPager控件,我正在使用我的ListView,当页面加载寻呼机时显示第一页,下一页,最后一页,正常页和10页,但当我点击任何一个按钮或页面的超链接时无论我点击多少次都会发生。我听说你必须在前置器中做一些事情,但是没有看到任何关于它如何工作的代码。任何人都可以告诉我,我应该在预渲染中使用哪些代码(以及如何调用prerender),如果这是解决方案,如果不是如何让我的数据管理器工作?

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

3 个答案:

答案 0 :(得分:2)

我能够通过做两件事来让你的代码示例工作。首先在列表视图控件中添加了OnPagePropertiesChanged事件并再次绑定数据。

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

在背后的代码中:

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

为了让更新面板工作,我使用了这个触发器:

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

我的一个建议是在完成所有工作后绝对最后添加更新面板。他们似乎隐藏了很多问题,使他们更难解决。

享受!

答案 1 :(得分:0)

我非常确定列表视图控件是无法在更新面板控件中使用的已知控件之一。暂时删除更新面板标记进行测试。

答案 2 :(得分:0)

如果使用plSearchResults.DataSource =。???以编程方式编写列表视图数据。 ,所以它被称为页面中的每个回发... Includin异步的。

DataSource对象必须实现寻呼机回调。

所以解决方案适合你。 (如果我假设正确)是: 像这样在代码中添加一行..

if(!isPostBack) //This line will assure tha the binding will be filled just once
    plSearchResults.DataSource = .???. 

然后它不会重新绑定每个回发... 并确保分页的回调是在DataSource对象上实现的

Asp.NET数据源对象,如SQLDataSource,LinqDataSource,EntitiesDataSource ......所有这些对象都实现了分页。如果要创建一个数据源programaricaly,则必须实现分页回调。