2012-10-01 42 views
0

我正在使用gridview來顯示大量的數據。c# - gridview排序/分頁建議

數據源存儲在會話中,這樣我就可以對gridview進行分頁/排序,而無需額外訪問SQL服務器。

有沒有更好的方法來頁面/排序網格,而不必在會話中存儲數據?

+0

有多少用戶使用您的應用程序?通常情況下最好只選擇你展示的內容。這意味着在GridView **和** DataSource中使用分頁。假設你的rdbms是SQL-Server,你可以使用'ROW_NUMBER'函數對結果集進行分區。然後只選擇你需要的切片(f.e. rows 100-200)。大多數情況下,數據庫中的第一個位置,而不是服務器的內存位置,效率更高,可擴展性更強。 –

+0

@TimSchmelter:200+ ...每次檢索10-15行需要一段時間。我寧願檢索完整的數據集並處理SQL服務器之外的分頁。 – user1481183

+0

「檢索10-15行需要一段時間」這一事實可能意味着更大的問題。 –

回答

2

我認爲這一切都取決於您正在使用的數據量。如果你使用幾百行,我會建議看看jQuery插件DataTables。從您的代碼角度來看,您會製作一個常規表格,然後在document.Ready事件中應用DataTables腳本。它具有分頁,排序和過濾功能。它非常強大。

如果你正在處理一千或更多的行,我會建議分頁和排序服務器端。在這種情況下,當用戶頁面時,您再次訪問數據庫,並且只返回他們在任何給定時間查看的行數。所以如果你只在一個頁面上顯示50條記錄,你的查詢應該只返回50條記錄。這種方式有點棘手,但對於用戶來說應該更快,並且不會有達到最大頁面大小的風險。

0

您可以編程方式使行可見和不可見的基礎上的尋呼機按鈕。將數據集分組爲頁面大小的塊。當你隱藏一個街區並製作一個你想要看到的街區時,另一個應該會彈出它的位置。您可以在客戶端進行這一切。

0

以我的經驗我建議使用ObjectDataSource,因爲您可以通過反射大塊數據動態地工作而不會混亂會話。 您可以使用的其他選項:選擇,插入和刪除。

0

假設您希望在會話中存儲整個表以避免觸擊SQL服務器,一種方法是對數據進行自己的分頁/排序,將得到的單頁值的項目放入列表中<> ,然後用該List填充DataGrid。

您必須實現自己的回頁/頁轉發控制,但這並不困難。這些控件在每次單擊向前/向後按鈕時都會從List中填充整個內存表中的新頁面的可查看數據。

好處是,您可以完全控制顯示的數據頁面,而不會導致DataGrid控件嘗試顯示比您想要的更多的內容。

但請確保您在會話中緩存的數據不會過時;即您自上次從SQL服務器檢索表後,您沒有顯示已修改或刪除的舊數據項,或未顯示新插入的項目。某種類型的超時可能是合適的,因此每隔幾分鐘左右刷新一次數據庫中的數據(而不是每次重新顯示屏幕時)。