2013-06-19 68 views
-1

比方說,我正在顯示股票價格,體育比分或電影出席等。如何在更新DBgrid時突出更改的單元格?

定期地,我將通過Close()然後打開()連接到與其關聯的數據源的查詢來刷新網格。我知道如何使用OnDrawCell()繪製單元格 - 我不知道如何知道新值是否與給定單元格的先前值相同或不同。

我想這裏有兩個用例,其中一個行數是固定的,他們仍然在同一行順序和一箇中行可以改變(插入/刪除或重新排序)。

對於前者,我可以在更新之前採用snapnap,並在更新之後進行比較,但這可能是大量數據。我不確定是否要將操作限制爲當前可見的行。我認爲用戶可能想要向下滾動,並且仍然會收到上次更新期間發生更改的任何通知。

對於後者,我很難過,除非,當然,每一行都有一個唯一的鍵。

我該如何做(有效)? TDbGrid的解決方案可以幫助每個人,使用TMS Software的TAdvDbGrid的解決方案對我來說也是很好的(就像一個(最好是免費的)第三方組件一樣)。

+2

如果DBGrid的只是用於顯示數據,您可以緩存以前的數據,並將其與新取的記錄進行比較,也可以使包含要跟蹤的數據的當前和以前的值的查詢。這樣,很容易比較值並相應地更改顏色。 – LightBulb

回答

2

TDBGrid讀取當前包含在其分配的數據集中的數據。它無法記住先前的值,執行計算或其他任何事情。如果你想跟蹤更改,你必須自己做。你可以通過多種方式(先前的值列,歷史表或其他)來完成,但它不能由網格本身完成。 TDBGrid用於呈現數據,而不是分析或存儲它。

一個建議是使用BeforePost事件,在那裏你可以的你的_oldvalue存儲到LastValue列,然後用它來看看跟蹤它在數據集中,如果值在TDBGrid.OnDrawColumnCell事件已發生變化,改變根據需要繪製/着色。像if LastValue <> CurrValue then...應該工作。

+0

+1 @kenwhite是的,我認爲這會是''OnCellChanging(oldValue,newValue)'的希望太多了。它看起來像快照,更新,比較,colo(烏拉圭回合)。 – Mawg

相關問題