【问题标题】:ListView DataPager is not pagingListView DataPager 不分页
【发布时间】:2015-12-23 20:32:21
【问题描述】:

ListView 显示正常,DataPager 显示底部的按钮,但是当我单击 NEXT 按钮时,DataPager 不会转到下一页数据。

ASPX 页面:

    <div id="EventListing">
        <asp:ListView ID="ListEvents" runat="server">
            <LayoutTemplate> 
                <div ID="itemPlaceholder" runat="server">
                </div>
                <div id="pagerFormat">
                     <asp:DataPager ID="ListingDataPager" runat="server" PageSize="5" PagedControlID="ListEvents" QueryStringField="page" >
                        <Fields>
                            <asp:NextPreviousPagerField 
                            FirstPageText="First"
                            LastPageText="Last"
                            NextPageText="Next"
                            PreviousPageText="Back" />
                        </Fields>
                    </asp:DataPager>
                </div>
            </LayoutTemplate>

            <ItemTemplate>
                <table id="tblEvents">
                    <tr>
                        <td rowspan="4" id="Col1Events"></td>
                        <td rowspan="4" id="Col2Events"></td>
                        <td rowspan="4" id="Col3Events"></td>
                        <td class="tdEvents"><span style="font-weight:bold; font-size: 1em;"><%#Eval("EVENT_DATERANGE") %>:&nbsp;&nbsp;<%#Eval("EVENT_NAME") %></span></td>
                    </tr>
                    <tr>
                        <td class="tdEvents"> <span style="font-size: .9em;"><%#Eval("EVENT_DESC") %></span></td>
                    </tr>
                    <tr>
                        <td class="tdEvents"><span style="font-size: .9em;"><%#Eval("EVENT_STREET") %>, <%#Eval("CITY.CITY_NAME") %></span></td>
                    </tr>
                    <tr>
                        <td class="tdEvents"><span style="font-size: .9em;"><%#Eval("EVENT_PHONE") %></span></td>
                    </tr>
                    <tr>
                        <td colspan="4" id="tdEmpty"></td>
                    </tr>                
                </table>
            </ItemTemplate>
        </asp:ListView>        
    </div>

页面背后的代码:

        protected void btnFindEvents_Click(object sender, EventArgs e)
        {
            DateTime StartDt;
            string EventType = ddlEventType.SelectedValue;
            string dt = Request.Form["DatePickername"];
            if (ddlEventType.SelectedIndex == 0)
            {
                EventType = "";
            }
            if (dt != "")
            {
                StartDt = Convert.ToDateTime(Request.Form["DatePickerName"]);
            }
            else
            {
                StartDt = DateTime.Now;
            }
            string CityName= ddlEventCity.SelectedValue;
            if (ddlEventCity.SelectedIndex == 0)
            {
                CityName = "";
            }

            if ((ddlEventType.SelectedIndex == 0) && (ddlEventCity.SelectedIndex == 0))
            {
                //(1) ALL EVENTS
                BLgetEvents obj = new BLgetEvents();
                var EventList = obj.getAllEvents(StartDt);
                ListEvents.DataSource = EventList;
                ListEvents.DataBind();
            }
}

【问题讨论】:

    标签: asp.net listview linq-to-entities datapager


    【解决方案1】:

    当您通过 DataPager 分页时,您必须在 ListView 上再次绑定数据。因此,您需要在 ListView 控件的PagePropertiesChanging 事件上实现此绑定。比如:

    // 1 - add a method to bind ListView, add some parameters if you need
    protected void BindListView()
    {
       var data = // get data from database
    
       ListEvents.DataSource = data;
       ListEvents.DataBind();
    }
    
    // 2 - call this method on the button
    protected void btnFindEvents_Click(object sender, EventArgs e)
    {
       BindListView();
    }        
    
    // 3 - call this method on the PagePropertiesChanging event of the ListView
    protected void ListEvents_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
    {
        //set current page startindex, max rows and rebind to false
        YourDataPagerControlId.SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
    
        //rebind List View
        BindListView();
    }
    

    在你的 asp.net 网络表单上,你需要在 listview 标签上设置事件:

    <asp:ListView ID="ListEvents" runat="server" OnPagePropertiesChanging="ListEvents_PagePropertiesChanging">
    ...
    </asp:ListView>
    

    当你从后台代码设置数据源时,同样的原则也适用于其他数据绑定控件,如 GridView、DataList、Repeater 等(你需要在某些分页事件上再次绑定)。解决此问题的另一种方法是,您可以添加一个数据源控件(如 objectdatasource、linqdatasource 等)并将其设置在 ListView 的 DataSourceID 属性上,DataPager 将自动工作。

    更多详情请看这个链接:http://weblogs.asp.net/hajan/archive/2011/09/08/paging-listview-using-datapager-without-using-datasource-control.aspx

    【讨论】:

    • 我不确定我是否理解 - 没有按钮。 DataPager 具有为导航定义的字段,我知道它们应该处理调用适当的数据。
    • 您是从 btnFindEvents 点击事件中设置数据源的吗?当您通过代码进行分页时,您需要再次绑定。所以我建议你创建一个方法来绑定列表视图上的数据并在btnFindEvents_ClickPagePropertiesChanging 上调用它。
    猜你喜欢
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多