From d1ad53a6ca81419507471d470a776bb70e6198fb Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Tue, 19 May 2026 17:56:32 +0800 Subject: [PATCH] fix(grid): discard pending edits when result set changes Pending changes (dirty cells, new rows, deleted rows) are tracked by sourceIndex into the current result array. When the query re-executes (e.g. different WHERE clause or pagination), stale indices silently point to different rows, causing wrong-row deletions on commit. Closes #336 (partial) --- apps/desktop/src/composables/useDataGridEditor.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/desktop/src/composables/useDataGridEditor.ts b/apps/desktop/src/composables/useDataGridEditor.ts index d5de63882a..cbb7fd9302 100644 --- a/apps/desktop/src/composables/useDataGridEditor.ts +++ b/apps/desktop/src/composables/useDataGridEditor.ts @@ -1,4 +1,4 @@ -import { ref, computed, nextTick, type ComputedRef, type Ref } from "vue"; +import { ref, computed, nextTick, watch, type ComputedRef, type Ref } from "vue"; import * as api from "@/lib/api"; import { buildDataGridRollbackStatements, @@ -704,6 +704,15 @@ export function useDataGridEditor(options: UseDataGridEditorOptions) { exitTransaction(); } + // Pending changes reference rows by sourceIndex. When the result set changes + // (e.g. different WHERE clause, pagination), stale indices point to wrong rows. + watch( + () => result.value.rows, + () => { + discardChanges(); + }, + ); + return { editingCell, editValue,