嵌套ListView DataPager停止使用updatepanel

时间:2014-05-04 20:55:21

标签: asp.net listview sharepoint updatepanel datapager

这是我的情景: 我有几个交易,每个交易都有一个类别,所有交易按类别分组: DealView:名称(类别),交易(交易对象列表) DealViews(List)绑定到类别列表视图,项目数据绑定上的listview生成相应的内部列表视图并设置其对应的数据寻呼机分页大小,它还决定是否显示内部寻呼机。类别列表视图的OnLoad事件用于任何内部寻呼机的回发。我可以调试代码,我可以看到Load事件被执行,内部分页器SetPageProperties也正确设置,但无论我点击多少次,UI都没有任何变化。如果我删除updatepanel,一切都按预期工作。这里有一些或很多代码:)

 <div class="tabs-content">
                     <asp:UpdatePanel ID="upDeals" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
                    <asp:ListView ID="lvCategorisedDeals" runat="server" DataKeyNames="Deals" >
                        <LayoutTemplate>
                            <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
                            <div class="clear"></div>
                        </LayoutTemplate>
                        <ItemTemplate>
                            <div class="tab-item">
                                <asp:ListView runat="server" ID="lvCategoryDeals">
                                    <LayoutTemplate>
                                        <div class="deals">
                                            <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
                                        </div>
                                        <div class="clear"></div>
                                    </LayoutTemplate>
                                    <ItemTemplate>
                                        <div class="rc-item">
                                            <h3><a href="<%# Eval("Url") %>"><%# Eval("Title") %></a></h3>
                                            <div class="deal-img">
                                                <a href="<%# Eval("Url") %>"><img src="<%# Eval("ImageUrl") %>" width="168" height="113"></a>
                                            </div>
                                            <div class="deal-data">
                                                <div class="info"><%# Eval("Caption") %></div>
                                                <div class="price"><%# Eval("Currency") %> <%# Eval("DiscountedPrice") %></div>
                                                <div class="deal-booking"><a href="#">Buy Now</a></div>
                                            </div>
                                        </div>
                                    </ItemTemplate>
                                </asp:ListView>
                                <div class="dealsPager">
                                    <asp:DataPager runat="server" ID="pgInner" PagedControlID="lvCategoryDeals" >
                                        <Fields>
                                            <asp:NumericPagerField />
                                        </Fields>
                                    </asp:DataPager>
                                </div>
                            </div>
                         </ItemTemplate>
                    </asp:ListView>
        </ContentTemplate>
</asp:UpdatePanel>
                </div>

在后面的代码中:

 void lvCategorisedDeals_Load(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
        {
            foreach (var item in lvCategorisedDeals.Items)
            {
                if (item.ItemType == ListViewItemType.DataItem)
                {
                    var lvInner = item.FindControl("lvCategoryDeals") as ListView;
                    if (lvInner == null)
                        throw new InvalidOperationException("The inner ListView was not found");

                    var pgInner = item.FindControl("pgInner") as DataPager;
                    if (pgInner == null)
                        throw new InvalidOperationException("The inner pager was not found");

                    if (lvCategorisedDeals.DataKeys == null && lvCategorisedDeals.DataKeys.Count == 0)
                        throw new InvalidOperationException("The outer ListViews Datakeys do not seem to be set");

                    var dataItem = lvCategorisedDeals.DataKeys[item.DisplayIndex].Value as List<GRCDeal>;


                    lvInner.PagePropertiesChanging += new EventHandler<PagePropertiesChangingEventArgs>(
                        (s, evt) =>
                        {

                            pgInner.SetPageProperties(evt.StartRowIndex, evt.MaximumRows, false);


                            // Get the data for the ListView lvInner
                            lvInner.DataSource = dataItem;
                            lvInner.DataBind();



                        }
                    );
                }
            }
        }
    }


    void lvCategorisedDeals_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        var listViewDataItem = e.Item as ListViewDataItem;
        if (listViewDataItem == null)
            return;

        if (listViewDataItem.ItemType == ListViewItemType.DataItem)
        {
            var lvInner = e.Item.FindControl("lvCategoryDeals") as ListView;
            if (lvInner == null)
                throw new InvalidOperationException("The inner ListView was not found");

            var pgInner = e.Item.FindControl("pgInner") as DataPager;
            if (pgInner == null)
                throw new InvalidOperationException("The inner pager was not found");

            var dataItem = listViewDataItem.DataItem as DealView;

            pgInner.PageSize = this.PageSize;
            pgInner.Visible = dataItem.Deals.Count > this.PageSize;

            lvInner.DataSource = dataItem.Deals;
            lvInner.DataBind();

        }

需要注意的其他事项是,我将该交易清单作为DataKeys传递,我能够抓住它。第一次绑定发生在页面加载上。该代码位于Visual WebPart(SharePoint 2013)的用户控件部分中。 感谢任何帮助,因为这会杀了我。

0 个答案:

没有答案