如何强制ListView控件以编程方式在第一页显示
题
我有一个寻呼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更大
不隶属于 StackOverflow