【问题标题】:How to force ListView to show first page programmatically如何强制 ListView 以编程方式显示第一页
【发布时间】:2011-02-20 10:09:58
【问题描述】:

我有一个分页的 ASP.NET ListView。显示的数据经过过滤,可以通过表单进行控制。当过滤器表单发生变化时,我会创建一个新查询并执行 DataBind。

但问题是,当我转到下一页并设置过滤器时,ListView 显示“没有返回数据”。这并不奇怪,因为应用过滤器后,只有一页数据。

所以我想做的是重置寻呼机。这是解决问题的正确方法吗?我该怎么做?

【问题讨论】:

  • 您是在 Pager 中使用 QueryStringFields 还是在 ViewState 中使用?
  • 不。我正在做的唯一非标准的事情是,我在每次回发时重建 Linq 查询......

标签: asp.net listview pager


【解决方案1】:

我在我的负载处理程序中使用了这个技巧。如果结果项的数量相同,它不会重置寻呼机,但页面索引仍然有效,所以我现在可以忍受。

if (IsPostBack)
{
    DataPager pgr = MyListView.FindControl("MyPager") as DataPager;
    if (pgr != null && MyListView.Items.Count != pgr.TotalRowCount)
    {
        pgr.SetPageProperties(0, pgr.MaximumRows, false);
    }
}

【讨论】:

  • 为我工作。请务必在列表视图数据绑定之前设置此项。
【解决方案2】:

如果你知道怎么做,那很简单。我将以下代码添加到我的过滤器的onchange-events 中:

DataPager pager = ListViewReference.FindControl("DataPagerId") as DataPager;
if (pager != null)
{
    pager.SetPageProperties(0, pager.PageSize, true);
}

【讨论】:

    【解决方案3】:

    上述任何一种解决方案都是正确的,因为它们都调用了相同的方法。我只是认为应该指出,您应该在希望更新数据源(即列表或数组等)的任何地方调用yourPagerElement.SetPageProperties(...)。例如,在应用了一些过滤或极大地改变列表大小的东西之后。

    【讨论】:

      【解决方案4】:

      如果您的列表视图是自动有界的(即 ObjectDataSource),您可能会遇到问题

      Load 事件处理程序不起作用,因为您还没有新的 DataPager.TotalRowPage 值,但您可以处理 Page_PreRenderComplete,如下所示:

          protected void Page_PreRenderComplete(object sender, EventArgs e)
          {
              // PreRenderComplete occurs just after databindings page events
              // And saves to viewstate
      
              // Trick on search to avoid "No data" on results when old page is greater than actual row count                
              if (DataPager1.StartRowIndex  > DataPager1.TotalRowCount )
                  DataPager1.SetPageProperties(0, DataPager1.MaximumRows, true);
          }
      

      这总是将 ListView 留在带有数据的页面中。如果 page 大于 TotalRow,则切换到第一页。

      注意:我使用的是有效的分页,并且只返回要显示的数据,所以我需要重新绑定数据源(最后一个参数(true))

      缺点:如果 StartRowIndex 大于 TotalRowCount,则双重数据绑定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-12
        • 2021-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多