2010-09-19 79 views
2

如果我得到我的數據集到一個DataTable中,然後我可以用它做,因爲我喜歡,但我有手動處理排序,分頁和緩存的複雜性。我現在試圖避免這種情況。 如果我改爲使用全部免費的SQL數據源。一個大頁面的GridView,彙總和總計與SQLdataSource

我需要一個總的行,我在gridview外顯示的內容。

  • 我知道我可以通過在IIS中掛鉤RowBound事件並總結我看到的每一行,但這似乎是一個複雜而行人。
  • 我知道我可以在我的SQLdataSource(它被緩存)上手動執行一個SQLdataSource.Select從中提取一個DataTable,然後使用DataTable.Compute對列進行求和,但是這看起來有點破解,而且我沒有確定兩個「選擇」實際上在高速緩存方面的效率如何。

我的首選方法是讓SQLserver使用Group By Rollup來完成繁瑣的工作,該工具爲我提供了結果集的最後一行以及我想要的總計。問題是我的GridView中有總計行,我不想在那裏,因爲我需要把總數放在別的地方(沒有意義讓他們在最後一頁,他們可以被排序和分頁)。我想我可以再次捕獲行綁定事件,並使這個總計行不可見,但這有點破解,可能會混淆分頁。

所以我想知道是否有一個簡潔的方法來做到這一點?

回答

0

當你的意思是大數據集,我假設一百萬加?

我建議緩存總計的結果。每次查看/分頁時,都不需要重新計算。創建/更新/刪除表格以刷新總計信息時創建可觀察事件? (因爲我沒有看到你提到過濾,這是唯一一次總數變化沒有數據集改變)

或者也許有定時到期緩存的總計信息。如果數據足夠大且易變,那麼有時候您必須考慮具有完全最新的總數的商業價值。通常這沒有商業價值。從幾秒前就足夠接近價值是好的。

至於SqlDataSource控件,我個人討厭它。無論發生什麼事情發生/邏輯/數據層?!

+0

不是那麼龐大,只是我想知道是否有一個簡單的方法來獲得容易放在那裏(總捲起來),所以我可以將它顯示在更有用的地方。這聽起來好像沒有。我可以用jQuery將它從那裏轉移出去,但這有點破綻。 三層架構?我可以做理論,但這是實踐;-) – philw 2011-09-15 21:39:43

+0

嗯,我只是指出,這是一個不好的做法。這裏的答案非常好。 http://stackoverflow.com/questions/6630291/asp-net-sqldatasource-vs-doing-it-in-code-behind。 ASPX的臭名昭着,因爲它是單元測試。添加sqldatasource控件只是對傷害的侮辱,而且這種做法在任何嚴肅的事情中都很少使用。 – 2011-09-23 02:06:44

+0

也許我不清楚 - 我*不*要求在軟件架構方面的經驗教訓或辯論,無論如何是好的。 – philw 2011-10-29 16:07:13