Hi,
When screen reader mode is enabled and a row is selected and focused in a ListGrid, then using updateData() to update a record in the underlying data source causes the following exception:
Tested using 'v14.1p_2026-04-24/Pro Deployment', in the latest version of the Chrome browser.
Test case code:
When screen reader mode is enabled and a row is selected and focused in a ListGrid, then using updateData() to update a record in the underlying data source causes the following exception:
Uncaught NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is no longer a child of this node. Perhaps it was moved in a 'blur' event handler?
at _3.isc_Canvas__updateParentHTML [as $p9] (ISC_Core.js:15133:170)
at _3.isc_c_Class_invokeSuper [as invokeSuper] (ISC_Core.js:621:15)
at _3.isc_GridRenderer__updateParentHTML [as $p9] (ISC_Grids.js:305:1008)
at _3.isc_Canvas__updateHTML [as $ra] (ISC_Core.js:15119:19)
at _3.isc_Canvas_redraw [as redraw] (ISC_Core.js:15108:186)
at _3.isc_c_Class_invokeSuper [as invokeSuper] (ISC_Core.js:621:15)
at _3.isc_GridRenderer_redraw [as redraw] (ISC_Grids.js:719:412)
at _3.isc_c_Class_invokeSuper [as invokeSuper] (ISC_Core.js:621:15)
at _3.isc_GridBody_redraw [as redraw] (ISC_Grids.js:850:23)
at _3.isc_ListGrid_refreshRow [as refreshRow] (ISC_Grids.js:2459:54)
at _3.isc_ListGrid__dataChanged [as $253v] (ISC_Grids.js:1243:6)
at _3.isc_ListGrid_dataChanged [as dataChanged] (ISC_Grids.js:1213:88)
at _3.<anonymous> (ISC_Grids.js:1181:287)
at _3.observation [as dataChanged] (ISC_Core.js:746:382)
at _3.isc_ResultSet__doneChangingData [as $ee] (ISC_DataBinding.js:12953:29)
at _3.isc_ResultSet_handleUpdate [as handleUpdate] (ISC_DataBinding.js:12950:33)
at _3.isc_ResultSet_dataSourceDataChanged [as dataSourceDataChanged] (ISC_DataBinding.js:12944:6)
at _3.eval (eval at isc__makeFunction (ISC_Core.js:161:1135), <anonymous>:4:10)
at _3.thunk (ISC_Core.js:752:28)
at _3.observation [as dataChanged] (ISC_Core.js:746:382)
at _3.isc_DataSource_updateCaches [as updateCaches] (ISC_DataBinding.js:2541:6)
at Object.isc_c_DataSource_handleUpdate [as handleUpdate] (ISC_DataBinding.js:955:4)
at _3.isc_DataSource_fireResponseCallbacks [as fireResponseCallbacks] (ISC_DataBinding.js:4278:16)
at _3.isc_DataSource__completeResponseProcessing [as $38b] (ISC_DataBinding.js:4253:6)
at _3._6 (ISC_DataBinding.js:2922:6)
at _3.isc_DataSource__handleClientOnlyReply [as $50e] (ISC_DataBinding.js:2928:4)
at _3.isc_c_Class_fireCallback [as fireCallback] (ISC_Core.js:654:102)
at _3.isc_Class_fireCallback [as fireCallback] (ISC_Core.js:893:89)
at _3.isc_c_RPCManager_fireReplyCallback [as __fireReplyCallback] (ISC_DataBinding.js:12279:77)
at $wnd.isc.RPCManager.fireReplyCallback (SmartGwtEntryPoint.java:508:1)
at _3.isc_c_RPCManager_fireReplyCallbacks [as fireReplyCallbacks] (ISC_DataBinding.js:12285:120)
at _3.isc_c_RPCManager_completeOperationReply [as completeOperationReply] (ISC_DataBinding.js:12257:6)
at _3.isc_c_RPCManager_performOperationReply [as performOperationReply] (ISC_DataBinding.js:12253:13)
at _3.isc_c_RPCManager__performTransactionReply [as $39d] (ISC_DataBinding.js:12095:26)
at _3.isc_c_Class_fireCallback [as fireCallback] (ISC_Core.js:654:102)
at _3.isc_c_Timer__fireTimeout [as $in] (ISC_Core.js:7399:6)
at ISC_Core.js:7392:40
at _3.isc_Canvas__updateParentHTML [as $p9] (ISC_Core.js:15133:170)
at _3.isc_c_Class_invokeSuper [as invokeSuper] (ISC_Core.js:621:15)
at _3.isc_GridRenderer__updateParentHTML [as $p9] (ISC_Grids.js:305:1008)
at _3.isc_Canvas__updateHTML [as $ra] (ISC_Core.js:15119:19)
at _3.isc_Canvas_redraw [as redraw] (ISC_Core.js:15108:186)
at _3.isc_c_Class_invokeSuper [as invokeSuper] (ISC_Core.js:621:15)
at _3.isc_GridRenderer_redraw [as redraw] (ISC_Grids.js:719:412)
at _3.isc_c_Class_invokeSuper [as invokeSuper] (ISC_Core.js:621:15)
at _3.isc_GridBody_redraw [as redraw] (ISC_Grids.js:850:23)
at _3.isc_ListGrid_refreshRow [as refreshRow] (ISC_Grids.js:2459:54)
at _3.isc_ListGrid__dataChanged [as $253v] (ISC_Grids.js:1243:6)
at _3.isc_ListGrid_dataChanged [as dataChanged] (ISC_Grids.js:1213:88)
at _3.<anonymous> (ISC_Grids.js:1181:287)
at _3.observation [as dataChanged] (ISC_Core.js:746:382)
at _3.isc_ResultSet__doneChangingData [as $ee] (ISC_DataBinding.js:12953:29)
at _3.isc_ResultSet_handleUpdate [as handleUpdate] (ISC_DataBinding.js:12950:33)
at _3.isc_ResultSet_dataSourceDataChanged [as dataSourceDataChanged] (ISC_DataBinding.js:12944:6)
at _3.eval (eval at isc__makeFunction (ISC_Core.js:161:1135), <anonymous>:4:10)
at _3.thunk (ISC_Core.js:752:28)
at _3.observation [as dataChanged] (ISC_Core.js:746:382)
at _3.isc_DataSource_updateCaches [as updateCaches] (ISC_DataBinding.js:2541:6)
at Object.isc_c_DataSource_handleUpdate [as handleUpdate] (ISC_DataBinding.js:955:4)
at _3.isc_DataSource_fireResponseCallbacks [as fireResponseCallbacks] (ISC_DataBinding.js:4278:16)
at _3.isc_DataSource__completeResponseProcessing [as $38b] (ISC_DataBinding.js:4253:6)
at _3._6 (ISC_DataBinding.js:2922:6)
at _3.isc_DataSource__handleClientOnlyReply [as $50e] (ISC_DataBinding.js:2928:4)
at _3.isc_c_Class_fireCallback [as fireCallback] (ISC_Core.js:654:102)
at _3.isc_Class_fireCallback [as fireCallback] (ISC_Core.js:893:89)
at _3.isc_c_RPCManager_fireReplyCallback [as __fireReplyCallback] (ISC_DataBinding.js:12279:77)
at $wnd.isc.RPCManager.fireReplyCallback (SmartGwtEntryPoint.java:508:1)
at _3.isc_c_RPCManager_fireReplyCallbacks [as fireReplyCallbacks] (ISC_DataBinding.js:12285:120)
at _3.isc_c_RPCManager_completeOperationReply [as completeOperationReply] (ISC_DataBinding.js:12257:6)
at _3.isc_c_RPCManager_performOperationReply [as performOperationReply] (ISC_DataBinding.js:12253:13)
at _3.isc_c_RPCManager__performTransactionReply [as $39d] (ISC_DataBinding.js:12095:26)
at _3.isc_c_Class_fireCallback [as fireCallback] (ISC_Core.js:654:102)
at _3.isc_c_Timer__fireTimeout [as $in] (ISC_Core.js:7399:6)
at ISC_Core.js:7392:40
Tested using 'v14.1p_2026-04-24/Pro Deployment', in the latest version of the Chrome browser.
Test case code:
Code:
@Override
public void onModuleLoad()
{
SC.setScreenReaderMode(true);
DataSource ds = new DataSource();
ds.setClientOnly(true);
DataSourceField dsField = new DataSourceField("Field", FieldType.TEXT);
DataSourceField dsField2 = new DataSourceField("Field2", FieldType.TEXT);
dsField.setPrimaryKey(true);
ds.setFields(dsField, dsField2);
Record record = new Record();
record.setAttribute("Field", "Value");
record.setAttribute("Field2", "Value2");
ds.setCacheData(record);
ListGrid grid = new ListGrid();
grid.setDataSource(ds);
grid.fetchData();
Scheduler.get().scheduleFixedDelay(() ->
{
grid.selectRecord(0);
grid.focusInRow(0);
Record updatedRecord = new Record();
updatedRecord.setAttribute("Field", "Value");
updatedRecord.setAttribute("Field2", "Value3");
ds.updateData(updatedRecord);
return false;
}, 2000);
grid.draw();
}
Comment