You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在数据更新后重绘TGrid以显示新值?

TGrid数据更新后刷新可见行内容的正确方法

当TGrid绑定的数据更新后,可见行无法自动显示新值(仅滚动后才正常),是因为TGrid会缓存已渲染的行内容,普通的重绘操作不会触发重新读取数据。

推荐解决方案

调用TGrid.UpdateRows方法,指定需要刷新的行范围,强制TGrid丢弃对应行的缓存并重新从OnGetValue事件获取最新数据:

// 刷新可见的前14行
fListGrid.UpdateRows(0, 13);

如果需要刷新所有行,可使用:

fListGrid.UpdateRows(0, fListGrid.RowCount - 1);

为什么之前的重绘代码无效?

你尝试的以下操作仅触发控件重绘,但不会清除TGrid的行缓存,因此无法显示新数据:

fListGrid.Repaint;
fListGrid.InvalidateRect(TRectF.Create(0,0, fListGrid.Width, fListGrid.Height));
fColumnOne.Repaint; // a column owned by the fListGrid
fColumnTwo.Repaint; // a column owned by the fListGrid

你找到的临时方法说明

将RowCount设为0再恢复的方法确实能生效,因为该操作会清空TGrid的所有行缓存并重新初始化行结构,但这种方式相对粗暴,可能会触发不必要的控件逻辑,建议优先使用UpdateRows方法。

内容的提问来源于stack exchange,提问作者Mike at Bookup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:38:15