我有一個分頁的ASP.NET ListView。顯示的數據被過濾,可以通過表單控制。當過濾器表單發生變化時,我創建一個新的查詢,並執行一個DataBind。如何強制ListView以編程方式顯示第一頁
但是,當我轉到下一頁並設置過濾器時,ListView顯示「沒有數據返回」。這並不奇怪,因爲在應用過濾器之後,只有一頁數據。
所以我想要做的就是重置尋呼機。這是對問題的正確解決方案嗎?我該怎麼做?
我有一個分頁的ASP.NET ListView。顯示的數據被過濾,可以通過表單控制。當過濾器表單發生變化時,我創建一個新的查詢,並執行一個DataBind。如何強制ListView以編程方式顯示第一頁
但是,當我轉到下一頁並設置過濾器時,ListView顯示「沒有數據返回」。這並不奇怪,因爲在應用過濾器之後,只有一頁數據。
所以我想要做的就是重置尋呼機。這是對問題的正確解決方案嗎?我該怎麼做?
我用這個黑客在我的加載處理。如果結果項目的數量相同,它將不會重置尋呼機,但頁面索引仍然有效,因此我現在可以忍受。
適合我。一定要在列表視圖是數據綁定之前設置它。 – rdans 2013-11-27 14:27:56
如果你知道如何去做,那很簡單。我添加下面的代碼到我的onchange
-events我的過濾器:
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更大。
您是否在Pager中使用QueryStringFields或從ViewState中使用QueryStringFields? – eugeneK 2010-05-17 13:45:31
沒有。我正在做的唯一非標準事情是,我重建每個回發的Linq查詢... – doekman 2010-05-17 14:27:59