我有一個數據表,它返回大約30,000條記錄。我在ASP中顯示這些記錄:GridView控件。我有一個下拉控件,我希望用戶能夠選擇要在GridView中顯示的記錄數。默認值應該是All,但也可以有20,50,100等值。我不太確定如何做到這一點。根據下拉菜單顯示gridview中的結果數量?
如果我沒有啓用Paging,該怎麼辦? PageSize仍然有效嗎?
我硬編碼GridView.PageSize = 1,它仍然返回所有記錄。
我有一個數據表,它返回大約30,000條記錄。我在ASP中顯示這些記錄:GridView控件。我有一個下拉控件,我希望用戶能夠選擇要在GridView中顯示的記錄數。默認值應該是All,但也可以有20,50,100等值。我不太確定如何做到這一點。根據下拉菜單顯示gridview中的結果數量?
如果我沒有啓用Paging,該怎麼辦? PageSize仍然有效嗎?
我硬編碼GridView.PageSize = 1,它仍然返回所有記錄。
如果你想讓PageSize工作,有來設置GridView的AllowPaging爲true。 顯然你必須創建管理事件PageIndexChanging的方法。
像這樣:
protected void myGvw_OnPageIndexChanging(object sender, GridViewPageEventArgs e)
{
myGvw.PageIndex = e.NewPageIndex;
// then recall the method that bind myGvw
}
下拉本來屬性的AutoPostBack設置爲true,並在他的OnSelectedIndexChanged您必須設置
myGvw.PageSize = Convert.ToInt32(myDropDown.SelectedValue)
使用gridview的PageSize屬性。 Link。
您可以將下拉列表中的值(20,50,100)添加到查詢中,以便只選擇頂部(20,50,100)記錄。
你打算使用分頁嗎?
這是我會做的。首先,我會向DataTable添加一列,如果它不在那裏,它將作爲計數器。然後,將您的GridView綁定到DataView。下面是一些代碼來證明什麼,我說什麼:
//add column with counter
table.Columns.Add("counter", typeof(int));
for (int i = 0; i < table.Rows.Count; i++)
{
table.Rows[i]["counter"] = i+1;
}
然後,得到DataTable中的默認視圖,設置的RowFilter:
DataView view = table.DefaultView;
view.RowFilter = "counter <= 100"; //or whatever number the user selected
最後,只是在GridView直接綁定到數據視圖。
在數據選擇中應該儘可能早地處理分頁。您不想從數據庫檢索30,000條記錄到應用程序服務器,然後只顯示其中的50條記錄。
喜歡的東西:(選擇第3頁,每頁50條)
select top 50 from x where pk not in (select top 100 pk from x)
意爲:
CREATE PROCEDURE sspGetItems (@pageSize int, @pageNum int)
AS
SELECT TOP @pageSize
FROM x
WHERE pk NOT IN
(
SELECT TOP (@pageNum - 1) * @pageSize pk FROM x
)
顯然更關心將需要大約排序等
當他們只選擇數據的子集,意味着什麼每頁100個,還是100個? – BFree 2009-01-06 20:30:22
這意味着100總數。我禁用了分頁功能。 – Xaisoft 2009-01-06 20:32:43
世界上沒有一個用戶可以一次理解30k行。我最多可以將它設置爲100,並允許在任何列上進行排序。然後,如果他們只想一次看到X,則可以更改頁面大小的值。 – jcollum 2009-01-06 22:23:45