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

FireMonkey如何删除与ListView项绑定的数据库记录并避免参数越界错误

问题原因

报错的核心是删除操作重复执行:当你在ListView1DeletingItem事件中删除数据集记录时,LiveBinding会自动同步移除ListView对应的绑定项,事件执行结束后,ListView的默认删除逻辑还会尝试按触发删除时的索引删除已经不存在的项,因此抛出Argument out of range错误。

解决方案

最简单的修复方式是在删除数据集记录后,禁用ListView的默认删除逻辑即可,不需要解绑或关闭数据集:

procedure TPassPlus.ListView1DeletingItem(Sender: TObject; AIndex: Integer; var ACanDelete: Boolean);
var
  myDBID: string;
begin
  // 直接通过事件传入的AIndex获取待删除项,避免左滑删除时Selected与当前操作项不一致的问题
  myDBID := ListView1.Items[AIndex].Tag.ToString;
  if DB_Table.Locate('DBID', myDBID, []) then
    DB_Table.Delete;
  // 禁止ListView自带的删除逻辑,LiveBinding已完成UI同步
  ACanDelete := False;
end;
补充说明
  • 你之前尝试的关闭数据集、停用绑定的操作会打断LiveBinding的正常同步逻辑,反而会触发UI更新异常,不需要执行这类操作。
  • LiveBinding本身支持UI与数据集的双向同步,本次问题不属于LiveBinding的功能缺陷,只是ListView原生左滑删除逻辑没有和绑定逻辑自动适配,仅需添加一行ACanDelete := False即可解决。

内容的提问来源于stack exchange,提问作者Haizhou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:45:05