我有一个寻呼ASP.NET ListView中。所示过滤数据,其可以通过一个形式来控制。当过滤器形式的变化,创建一个新的查询,并执行的DataBind。

然而,问题当我去到下一个页面,并设置一个过滤器,ListView控件显示“无数据返回”。这是不奇怪的,因为应用了滤波器后,只存在一个数据的页面。

因此,我想要做的就是重新寻呼机。那是一个正确的解决问题的办法?而做我怎么做呢?

有帮助吗?

解决方案

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

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

其他提示

如果你知道如何做到这一点,很简单。我添加的代码下面我滤波器的我的onchange事件:

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

无论上述方案的,因为它们既呼叫相同的方法正确。我只是觉得它应该指出的是,你应该叫yourPagerElement.SetPageProperties(...)无论你想你的数据源(如列表或阵列等)进行更新。例如,应用一些过滤或东西大大改变列表尺寸之后。

您可能有问题,如果您的列表视图被自动界定(即的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与数据的页面。如果页面比TotalRow,切换到第一页更大。

注意:我使用efective寻呼,并返回只有数据将被显示,所以我需要重新绑定德数据源(最后一个参数(真))

缺点:双数据绑定如果StartRowIndex大于TotalRowCount更大

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top