我使用代碼填充GridView,將數據源設置爲查詢返回的數據集。所以顯然,排序和分頁不會像神奇般的工作,如果我使用datasourceid =一些sqldatasource。gridview排序:每次都需要重新讀取?
我發現了很多關於如何在Web上執行此操作的示例,但它們都似乎每次都重新執行查詢。不應該將查詢的內容保存在視圖狀態中嗎?是否有某種方法可以獲取以前的查詢結果並重新排序而不必返回數據庫? (它是否將所有數據保存在視圖狀態中?如果是這樣,爲什麼我無法得到它?將所有數據全部發送回用戶的瀏覽器並將其全部發回,浪費所有帶寬,如果沒有)
此外,如果我嘗試允許分頁,看來我再次必須重新執行查詢,每次用戶轉到另一頁時。如果用戶對頁面進行排序然後頁面,那麼我必須記住隱藏字段或類似內容的排序順序,以便我可以重新讀取數據,重新排序,然後進入正確的頁面。
鑑於當您使用數據源控件時,所有這些行爲都是內置的,我想我在這裏丟失了一些東西。但是考慮到所有這些例子都是這樣緩慢而艱難的,如果我錯過了一些東西,很多其他程序員也會錯過它。
「sorked magically」我的意思是如果你使用數據源控件,你不必編寫任何代碼來實現分頁或排序。 – Jay
是的,我知道如何使用會話數據,但我真的不喜歡這樣的想法:沒有可靠的方法來丟棄數據,當它沒有時間需要,所以它最終會永遠浮動,如果用戶可以同時打開兩個屏幕實例,則會遇到問題。保存在視圖狀態是可能的,但帶寬增加一倍。通過網絡讀取數據的時間將超過在許多情況下重新查詢數據庫的時間。所以確定它是可行的,但它並不漂亮。 – Jay
好吧,我明白你在說什麼......個人而言,我討厭使用數據源控件,因爲它抽象瞭如何在引擎蓋下發生的事情,但它確實節省了大量時間。ViewState並不理想,如果您可以投入一些時間使數據丟棄更可靠,則會話可能是您的選擇。 – markp3rry