更新DBgrid时如何突出显示已更改的单元格?

时间:2013-06-19 01:55:30

标签: delphi tdbgrid tms

假设我正在显示股票价格,体育比分,或电影上映等等。

我会定期刷新网格的Close()然后打开()链接到其关联数据源的查询。

我知道如何使用OnDrawCell()绘制一个单元格 - 我无法弄清楚的是如何知道新值是否与给定单元格的先前值相同或不同。

我想这里有两个用例,一个是行数固定的,它们保持相同的行顺序,一个行可以改变(插入/删除或重新排序)。

对于前者,我可以在更新之前进行snapshops拍摄,并在更新后进行比较,但这可能是很多数据。我不确定是否要将操作限制为当前可见的行。我认为用户可能希望向下滚动并仍然收到上次更新期间发生更改的通知。

对于后者,我感到难过,当然,除非每一行都有一个唯一的密钥。

我怎样才能(有效地)这样做? TDbGrid的解决方案对每个人都有帮助,TMS Software的TAdvDbGrid解决方案对我来说没问题(就像(最好是免费的)第三方组件一样)。

1 个答案:

答案 0 :(得分:2)

TDBGrid读取当前包含在其指定数据集中的数据。它无法记住先前的值,执行计算或其他任何事情。如果您想跟踪更改,则必须自己完成。您可以通过多种方式(先前值列,历史表或其他)来完成它,但它不能由网格本身完成。 TDBGrid用于显示数据,而不是分析或存储数据。

一个建议是使用BeforePost事件在数据集中跟踪它,您可以将_oldvalue列的LastValue存储到TDBGrid.OnDrawColumnCell列,然后使用它来查看如果if LastValue <> CurrValue then...事件中的值已更改,则根据需要更改绘图/着色。像{{1}}这样的东西应该有效。