2009-01-06 59 views
1

我有一個數據表,它返回大約30,000條記錄。我在ASP中顯示這些記錄:GridView控件。我有一個下拉控件,我希望用戶能夠選擇要在GridView中顯示的記錄數。默認值應該是All,但也可以有20,50,100等值。我不太確定如何做到這一點。根據下拉菜單顯示gridview中的結果數量?

如果我沒有啓用Paging,該怎麼辦? PageSize仍然有效嗎?

我硬編碼GridView.PageSize = 1,它仍然返回所有記錄。

+0

當他們只選擇數據的子集,意味着什麼每頁100個,還是100個? – BFree 2009-01-06 20:30:22

+0

這意味着100總數。我禁用了分頁功能。 – Xaisoft 2009-01-06 20:32:43

+0

世界上沒有一個用戶可以一次理解30k行。我最多可以將它設置爲100,並允許在任何列上進行排序。然後,如果他們只想一次看到X,則可以更改頁面大小的值。 – jcollum 2009-01-06 22:23:45

回答

2
採取

如果你想讓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) 
2

您可以將下拉列表中的值(20,50,100)添加到查詢中,以便只選擇頂部(20,50,100)記錄。

你打算使用分頁嗎?

1

這是我會做的。首先,我會向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直接綁定到數據視圖。

2

在數據選擇中應該儘可能早地處理分頁。您不想從數據庫檢索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 
) 

顯然更關心將需要大約排序等