From 1c07ed4ed188e684d53dddad3a99fe089ba138ee Mon Sep 17 00:00:00 2001 From: Alyar <> Date: Thu, 27 Aug 2026 15:32:11 +0400 Subject: [PATCH] DataGrid - Fix column width changes not being applied immediately (Option 1) --- .../m_columns_controller.ts | 49 +++++++++++++++---- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/grid_core/columns_controller/m_columns_controller.ts b/packages/devextreme/js/__internal/grids/grid_core/columns_controller/m_columns_controller.ts index be977eb272a1..d020c375b3ce 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/columns_controller/m_columns_controller.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/columns_controller/m_columns_controller.ts @@ -1494,22 +1494,53 @@ export class ColumnsController extends modules.Controller { const column = findColumn(columns, identifier); if (column) { + const isOptionString = isString(option); + if (arguments.length === 1) { return extend({}, column); } - if (isString(option)) { - if (arguments.length === 2) { - return columnOptionCore(that, column, option); + + if (isOptionString && arguments.length === 2) { + return columnOptionCore(that, column, option); + } + + const setColumnOption = () => { + if (isOptionString) { + columnOptionCore(that, column, option, value, notFireEvent); } - columnOptionCore(that, column, option, value, notFireEvent); - } else if (isObject(option)) { - each(option, (optionName, optionValue) => { - columnOptionCore(that, column, optionName, optionValue, notFireEvent); - }); + if (isObject(option)) { + each(option, (optionName, optionValue) => { + columnOptionCore(that, column, optionName, optionValue, notFireEvent); + }); + } + + fireColumnsChanged(that); + }; + + if (!notFireEvent && this.needToWrapToBeginEndUpdate(option)) { + this.wrapToBeginEndUpdate(setColumnOption); + } else { + setColumnOption(); } + } + } - fireColumnsChanged(that); + private needToWrapToBeginEndUpdate(option: string | Record): boolean { + const isWidthChanging = isObject(option) + ? 'width' in option + : option === 'width'; + + return isWidthChanging && !this._updateLockCount; + } + + private wrapToBeginEndUpdate(callback: () => void): void { + if (!isFunction(callback)) { + return; } + + this.component.beginUpdate(); + callback(); + this.component.endUpdate(); } private clearSorting() {